mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-09 02:24:03 +01:00
Merge branch 'ohmyzsh:master' into add-stash-info
This commit is contained in:
commit
9d28e69a22
137 changed files with 2859 additions and 1011 deletions
6
.github/FUNDING.yml
vendored
6
.github/FUNDING.yml
vendored
|
|
@ -1,2 +1,6 @@
|
||||||
github: [ohmyzsh, robbyrussell, mcornella, larson-carter, carlosala]
|
github:
|
||||||
|
- ohmyzsh
|
||||||
|
- robbyrussell
|
||||||
|
- mcornella
|
||||||
|
- carlosala
|
||||||
open_collective: ohmyzsh
|
open_collective: ohmyzsh
|
||||||
|
|
|
||||||
87
.github/INCIDENT_RESPONSE_PLAN.md
vendored
Normal file
87
.github/INCIDENT_RESPONSE_PLAN.md
vendored
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
# Incident Response Plan
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
Please see [the latest guidelines](https://github.com/ohmyzsh/ohmyzsh/blob/master/SECURITY.md) for instructions.
|
||||||
|
|
||||||
|
## Phases
|
||||||
|
|
||||||
|
### Triage
|
||||||
|
|
||||||
|
1. Is this a valid security vulnerability?
|
||||||
|
|
||||||
|
- [ ] It affects our CI/CD or any of our repositories.
|
||||||
|
- [ ] For ohmyzsh/ohmyzsh, it affects the latest commit.
|
||||||
|
- [ ] For others, it affects the latest commit on the default branch.
|
||||||
|
- [ ] It affects a third-party dependency:
|
||||||
|
- [ ] Zsh or git
|
||||||
|
- [ ] For a plugin, the vulnerability is a result of our usage of the dependency.
|
||||||
|
|
||||||
|
2. What's the scope of the vulnerability?
|
||||||
|
|
||||||
|
- [ ] Our codebase.
|
||||||
|
- [ ] A direct third-party dependency (Zsh, git, other plugins).
|
||||||
|
- [ ] An indirect third-party dependency.
|
||||||
|
- [ ] Out of scope, a third-party dependency that is the responsibility of the user.
|
||||||
|
- [ ] Out of scope, any other case (edit this plan and add the details).
|
||||||
|
|
||||||
|
3. Is the vulnerability actionable?
|
||||||
|
|
||||||
|
- [ ] Yes, we can submit a fix.
|
||||||
|
- [ ] Yes, we can disable a feature.
|
||||||
|
- [ ] Yes, we can mitigate the risk.
|
||||||
|
- [ ] Yes, we can remove a vulnerable dependency.
|
||||||
|
- [ ] Yes, we can apply a workaround.
|
||||||
|
- [ ] Yes, we can apply a patch to a vulnerable dependency ([example for CVE-2021-45444](https://github.com/ohmyzsh/ohmyzsh/blob/cb72d7dcbf08b435c7f8a6470802b207b2aa02c3/lib/vcs_info.zsh)).
|
||||||
|
- [ ] No, the vulnerability is not actionable.
|
||||||
|
|
||||||
|
4. What's the impact of the vulnerability?
|
||||||
|
|
||||||
|
Assess using the *CIA* triad:
|
||||||
|
|
||||||
|
- **Confidentiality**: example: report or sharing of secrets.
|
||||||
|
- **Integrity**: affects the integrity of the system (deletion, corruption or encryption of data, OS file corruption, etc.).
|
||||||
|
- **Availability**: denial of login, deletion of required files to boot / login, etc.
|
||||||
|
|
||||||
|
5. What's the exploitability of the vulnerability?
|
||||||
|
|
||||||
|
Consider how easy it is to exploit, and if it affects all users or requires specific configurations.
|
||||||
|
|
||||||
|
6. What's the severity of the vulnerability?
|
||||||
|
|
||||||
|
You can use the [CVSS v3.1](https://www.first.org/cvss/specification-document) to assess the severity of the vulnerability.
|
||||||
|
|
||||||
|
7. When was the vulnerability introduced?
|
||||||
|
|
||||||
|
- Find the responsible code path.
|
||||||
|
- Find the commit or Pull Request that introduced the vulnerability.
|
||||||
|
|
||||||
|
8. Who are our security contacts?
|
||||||
|
|
||||||
|
Assess upstream or downstream contacts, and their desired channels of security.
|
||||||
|
|
||||||
|
> TODO: add a list of contacts.
|
||||||
|
|
||||||
|
### Mitigation
|
||||||
|
|
||||||
|
- **Primary focus:** removing possibility of exploitation fast.
|
||||||
|
- **Secondary focus:** addressing the root cause.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Make sure to test that the mitigation works as expected, and does not introduce new vulnerabilities.
|
||||||
|
> When deploying a patch, make sure not to disclose the vulnerability in the commit message or PR description.
|
||||||
|
|
||||||
|
> TODO: introduce a fast-track update process for security patches.
|
||||||
|
|
||||||
|
### Disclosure
|
||||||
|
|
||||||
|
Primary goal: inform our users about the vulnerability, and whether they are affected or not affected based on information they should be able to check themselves in a straightforward way.
|
||||||
|
|
||||||
|
> TODO: add a vulnerability disclosure template.
|
||||||
|
|
||||||
|
### Learn
|
||||||
|
|
||||||
|
- Document the vulnerability, steps performed, and lessons learned.
|
||||||
|
- Document the timeline of events.
|
||||||
|
- Document and address improvements on the Security Incident Response Plan.
|
||||||
|
- Depending on the severity of the vulnerability, consider disclosing the root cause or not based on likely impact on users and estimated potential victims still affected.
|
||||||
6
.github/dependencies.yml
vendored
6
.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: 25da917cf5a88f3e58f05be3868a7b2748c8afe6
|
version: a9d7c822e42cc6a5b028b59e46cffcc8e7bc1134
|
||||||
precopy: |
|
precopy: |
|
||||||
set -e
|
set -e
|
||||||
find . ! -name _gradle ! -name LICENSE -delete
|
find . ! -name _gradle ! -name LICENSE -delete
|
||||||
|
|
@ -30,7 +30,7 @@ dependencies:
|
||||||
plugins/wd:
|
plugins/wd:
|
||||||
repo: mfaerevaag/wd
|
repo: mfaerevaag/wd
|
||||||
branch: master
|
branch: master
|
||||||
version: tag:v0.9.3
|
version: tag:v0.10.1
|
||||||
precopy: |
|
precopy: |
|
||||||
set -e
|
set -e
|
||||||
rm -r test
|
rm -r test
|
||||||
|
|
@ -38,7 +38,7 @@ dependencies:
|
||||||
plugins/z:
|
plugins/z:
|
||||||
branch: master
|
branch: master
|
||||||
repo: agkozak/zsh-z
|
repo: agkozak/zsh-z
|
||||||
version: dd94ef04acc41748ba171eb219971cb455e0040b
|
version: cf9225feebfae55e557e103e95ce20eca5eff270
|
||||||
precopy: |
|
precopy: |
|
||||||
set -e
|
set -e
|
||||||
test -e README.md && mv -f README.md MANUAL.md
|
test -e README.md && mv -f README.md MANUAL.md
|
||||||
|
|
|
||||||
21
.github/workflows/dependencies.yml
vendored
21
.github/workflows/dependencies.yml
vendored
|
|
@ -9,25 +9,32 @@ jobs:
|
||||||
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)
|
||||||
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
|
with:
|
||||||
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
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: ohmyzsh/github-app-token@v2
|
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@v5
|
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
cache: "pip"
|
cache: "pip"
|
||||||
- name: Process dependencies
|
- name: Process dependencies
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
GIT_APP_NAME: ohmyzsh[bot]
|
GIT_APP_NAME: ohmyzsh[bot]
|
||||||
GIT_APP_EMAIL: 54982679+ohmyzsh[bot]@users.noreply.github.com
|
GIT_APP_EMAIL: 54982679+ohmyzsh[bot]@users.noreply.github.com
|
||||||
TMP_DIR: ${{ runner.temp }}
|
TMP_DIR: ${{ runner.temp }}
|
||||||
|
|
|
||||||
12
.github/workflows/dependencies/requirements.txt
vendored
12
.github/workflows/dependencies/requirements.txt
vendored
|
|
@ -1,7 +1,7 @@
|
||||||
certifi==2025.1.31
|
certifi==2025.11.12
|
||||||
charset-normalizer==3.4.1
|
charset-normalizer==3.4.4
|
||||||
idna==3.10
|
idna==3.11
|
||||||
PyYAML==6.0.2
|
PyYAML==6.0.3
|
||||||
requests==2.32.3
|
requests==2.32.5
|
||||||
semver==3.0.4
|
semver==3.0.4
|
||||||
urllib3==2.3.0
|
urllib3==2.6.2
|
||||||
|
|
|
||||||
72
.github/workflows/dependencies/updater.py
vendored
72
.github/workflows/dependencies/updater.py
vendored
|
|
@ -219,32 +219,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 +276,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 +378,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 +423,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,
|
||||||
|
|
|
||||||
14
.github/workflows/installer.yml
vendored
14
.github/workflows/installer.yml
vendored
|
|
@ -25,8 +25,13 @@ jobs:
|
||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
- macos-latest
|
- macos-latest
|
||||||
steps:
|
steps:
|
||||||
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
|
with:
|
||||||
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Set up git repository
|
- name: Set up git repository
|
||||||
uses: actions/checkout@v4
|
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
|
||||||
|
|
@ -41,8 +46,13 @@ jobs:
|
||||||
needs:
|
needs:
|
||||||
- test
|
- test
|
||||||
steps:
|
steps:
|
||||||
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
|
with:
|
||||||
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
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
|
||||||
|
|
|
||||||
7
.github/workflows/main.yml
vendored
7
.github/workflows/main.yml
vendored
|
|
@ -23,8 +23,13 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||||
steps:
|
steps:
|
||||||
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
|
with:
|
||||||
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Set up git repository
|
- name: Set up git repository
|
||||||
uses: actions/checkout@v4
|
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
|
||||||
|
|
|
||||||
77
.github/workflows/project.yml
vendored
77
.github/workflows/project.yml
vendored
|
|
@ -16,16 +16,19 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||||
steps:
|
steps:
|
||||||
- name: Authenticate as @ohmyzsh
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
id: generate_token
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
uses: ohmyzsh/github-app-token@v2
|
|
||||||
with:
|
with:
|
||||||
app_id: ${{ secrets.OHMYZSH_APP_ID }}
|
egress-policy: audit
|
||||||
private_key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
- name: Authenticate as @ohmyzsh
|
||||||
- name: Store app token
|
id: generate-token
|
||||||
run: echo "GH_TOKEN=${{ steps.generate_token.outputs.token }}" >> "$GITHUB_ENV"
|
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.OHMYZSH_APP_ID }}
|
||||||
|
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
||||||
- name: Read project data
|
- name: Read project data
|
||||||
env:
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
ORGANIZATION: ohmyzsh
|
ORGANIZATION: ohmyzsh
|
||||||
PROJECT_NUMBER: "1"
|
PROJECT_NUMBER: "1"
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -48,14 +51,14 @@ jobs:
|
||||||
}' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json
|
}' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json
|
||||||
|
|
||||||
# Parse project data
|
# Parse project data
|
||||||
cat >> $GITHUB_ENV <<EOF
|
cat >> "$GITHUB_ENV" <<EOF
|
||||||
PROJECT_ID=$(jq '.data.organization.projectV2.id' project_data.json)
|
PROJECT_ID=$(jq '.data.organization.projectV2.id' project_data.json)
|
||||||
PLUGIN_FIELD_ID=$(jq '.data.organization.projectV2.fields.nodes[] | select(.name == "Plugin") | .id' project_data.json)
|
PLUGIN_FIELD_ID=$(jq '.data.organization.projectV2.fields.nodes[] | select(.name == "Plugin") | .id' project_data.json)
|
||||||
THEME_FIELD_ID=$(jq '.data.organization.projectV2.fields.nodes[] | select(.name == "Theme") | .id' project_data.json)
|
THEME_FIELD_ID=$(jq '.data.organization.projectV2.fields.nodes[] | select(.name == "Theme") | .id' project_data.json)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
- name: Add to project
|
- name: Add to project
|
||||||
env:
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
ISSUE_OR_PR_ID: ${{ github.event.issue.node_id || github.event.pull_request.node_id }}
|
ISSUE_OR_PR_ID: ${{ github.event.issue.node_id || github.event.pull_request.node_id }}
|
||||||
run: |
|
run: |
|
||||||
item_id="$(gh api graphql -f query='
|
item_id="$(gh api graphql -f query='
|
||||||
|
|
@ -66,45 +69,51 @@ jobs:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
' -f project=$PROJECT_ID -f content=$ISSUE_OR_PR_ID --jq '.data.addProjectV2ItemById.item.id')"
|
' -f project="$PROJECT_ID" -f content="$ISSUE_OR_PR_ID" --jq '.data.addProjectV2ItemById.item.id')"
|
||||||
|
|
||||||
echo "ITEM_ID=$item_id" >> $GITHUB_ENV
|
echo "ITEM_ID=$item_id" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Classify Pull Request
|
- name: Classify Pull Request
|
||||||
if: github.event_name == 'pull_request_target'
|
if: github.event_name == 'pull_request_target'
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||||
run: |
|
run: |
|
||||||
touch plugins.list themes.list
|
# Get the list of modified files in the PR, and extract plugins and themes
|
||||||
|
gh pr view "$PR_NUMBER" \
|
||||||
gh pr view ${{ github.event.pull_request.number }} \
|
--repo "$GITHUB_REPOSITORY" \
|
||||||
--repo ${{ github.repository }} \
|
|
||||||
--json files --jq '.files.[].path' | awk -F/ '
|
--json files --jq '.files.[].path' | awk -F/ '
|
||||||
|
BEGIN {
|
||||||
|
plugins = 0
|
||||||
|
themes = 0
|
||||||
|
}
|
||||||
/^plugins\// {
|
/^plugins\// {
|
||||||
plugins[$2] = 1
|
if (plugin == $2) next
|
||||||
|
plugin = $2
|
||||||
|
plugins++
|
||||||
}
|
}
|
||||||
/^themes\// {
|
/^themes\// {
|
||||||
gsub(/\.zsh-theme$/, "", $2)
|
gsub(/\.zsh-theme$/, "", $2)
|
||||||
themes[$2] = 1
|
if (theme == $2) next
|
||||||
|
theme = $2
|
||||||
|
themes++
|
||||||
}
|
}
|
||||||
END {
|
END {
|
||||||
for (plugin in plugins) {
|
# plugin and theme are values controlled by the PR author
|
||||||
print plugin >> "plugins.list"
|
# so we should sanitize them before using anywhere else
|
||||||
|
if (plugins == 1) {
|
||||||
|
gsub(/[^a-zA-Z0-9._-]/, "", plugin)
|
||||||
|
print "PLUGIN=" plugin
|
||||||
}
|
}
|
||||||
for (theme in themes) {
|
if (themes == 1) {
|
||||||
print theme >> "themes.list"
|
gsub(/[^a-zA-Z0-9._-]/, "", theme)
|
||||||
|
print "THEME=" theme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'
|
' >> "$GITHUB_ENV"
|
||||||
# If only one plugin is modified, add it to the plugin field
|
|
||||||
if [[ $(wc -l < plugins.list) = 1 ]]; then
|
|
||||||
echo "PLUGIN=$(cat plugins.list)" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
# If only one theme is modified, add it to the theme field
|
|
||||||
if [[ $(wc -l < themes.list) = 1 ]]; then
|
|
||||||
echo "THEME=$(cat themes.list)" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Fill Pull Request fields in project
|
- name: Fill Pull Request fields in project
|
||||||
if: github.event_name == 'pull_request_target'
|
if: github.event_name == 'pull_request_target'
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
gh api graphql -f query='
|
gh api graphql -f query='
|
||||||
mutation (
|
mutation (
|
||||||
|
|
@ -140,7 +149,7 @@ jobs:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
' -f project=$PROJECT_ID -f item=$ITEM_ID \
|
' -f project="$PROJECT_ID" -f item="$ITEM_ID" \
|
||||||
-f plugin_field=$PLUGIN_FIELD_ID -f plugin_value=$PLUGIN \
|
-f plugin_field="$PLUGIN_FIELD_ID" -f plugin_value="$PLUGIN" \
|
||||||
-f theme_field=$THEME_FIELD_ID -f theme_value=$THEME \
|
-f theme_field="$THEME_FIELD_ID" -f theme_value="$THEME" \
|
||||||
--silent
|
--silent
|
||||||
|
|
|
||||||
65
.github/workflows/scorecard.yml
vendored
Normal file
65
.github/workflows/scorecard.yml
vendored
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
# This workflow uses actions that are not certified by GitHub. They are provided
|
||||||
|
# by a third-party and are governed by separate terms of service, privacy
|
||||||
|
# policy, and support documentation.
|
||||||
|
|
||||||
|
name: Scorecard supply-chain security
|
||||||
|
on:
|
||||||
|
# For Branch-Protection check. Only the default branch is supported. See
|
||||||
|
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
|
||||||
|
branch_protection_rule:
|
||||||
|
# To guarantee Maintained check is occasionally updated. See
|
||||||
|
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
|
||||||
|
schedule:
|
||||||
|
- cron: '20 7 * * 2'
|
||||||
|
push:
|
||||||
|
branches: ["master"]
|
||||||
|
|
||||||
|
# Declare default permissions as read only.
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analysis:
|
||||||
|
name: Scorecard analysis
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
# Needed to upload the results to code-scanning dashboard.
|
||||||
|
security-events: write
|
||||||
|
# Needed to publish results and get a badge (see publish_results below).
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
actions: read
|
||||||
|
# To allow GraphQL ListCommits to work
|
||||||
|
issues: read
|
||||||
|
pull-requests: read
|
||||||
|
# To detect SAST tools
|
||||||
|
checks: read
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
|
with:
|
||||||
|
egress-policy: audit
|
||||||
|
|
||||||
|
- name: "Checkout code"
|
||||||
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: "Run analysis"
|
||||||
|
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
|
||||||
|
with:
|
||||||
|
results_file: results.sarif
|
||||||
|
results_format: sarif
|
||||||
|
publish_results: true
|
||||||
|
|
||||||
|
- name: "Upload artifact"
|
||||||
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||||
|
with:
|
||||||
|
name: SARIF file
|
||||||
|
path: results.sarif
|
||||||
|
retention-days: 5
|
||||||
|
|
||||||
|
- name: "Upload to code-scanning"
|
||||||
|
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
|
||||||
|
with:
|
||||||
|
sarif_file: results.sarif
|
||||||
5
.gitpod.Dockerfile
vendored
5
.gitpod.Dockerfile
vendored
|
|
@ -1,5 +0,0 @@
|
||||||
FROM gitpod/workspace-full
|
|
||||||
|
|
||||||
RUN sudo apt-get update && \
|
|
||||||
sudo apt-get install -y zsh && \
|
|
||||||
sudo rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
image:
|
|
||||||
file: .gitpod.Dockerfile
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- init: |
|
|
||||||
export EDITOR="command gp open -w" VISUAL="command gp open -w"
|
|
||||||
cp -f /workspace/ohmyzsh/templates/zshrc.zsh-template ~/.zshrc
|
|
||||||
ln -sf /workspace/ohmyzsh ~/.oh-my-zsh
|
|
||||||
command: exec zsh
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2009-2022 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors)
|
Copyright (c) 2009-2025 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors)
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
||||||
10
README.md
10
README.md
|
|
@ -18,10 +18,10 @@ 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)
|
||||||
[](https://gitpod.io/#https://github.com/ohmyzsh/ohmyzsh)
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Table of Contents</summary>
|
<summary>Table of Contents</summary>
|
||||||
|
|
@ -163,7 +163,7 @@ adds any) and extra goodies that are included in that particular plugin.
|
||||||
|
|
||||||
### Themes
|
### Themes
|
||||||
|
|
||||||
We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme happy. We have over one
|
We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme-happy. We have over one
|
||||||
hundred and fifty themes now bundled. Most of them have
|
hundred and fifty themes now bundled. Most of them have
|
||||||
[screenshots](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) on the wiki (We are working on updating this!).
|
[screenshots](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) on the wiki (We are working on updating this!).
|
||||||
Check them out!
|
Check them out!
|
||||||
|
|
@ -218,7 +218,7 @@ terminal window.
|
||||||
ZSH_THEME="random" # (...please let it be pie... please be some pie..)
|
ZSH_THEME="random" # (...please let it be pie... please be some pie..)
|
||||||
```
|
```
|
||||||
|
|
||||||
And if you want to pick random theme from a list of your favorite themes:
|
And if you want to pick a random theme from a list of your favorite themes:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ZSH_THEME_RANDOM_CANDIDATES=(
|
ZSH_THEME_RANDOM_CANDIDATES=(
|
||||||
|
|
@ -426,7 +426,7 @@ turn it off by setting the following in your .zshrc file, before Oh My Zsh is so
|
||||||
zstyle ':omz:alpha:lib:git' async-prompt no
|
zstyle ':omz:alpha:lib:git' async-prompt no
|
||||||
```
|
```
|
||||||
|
|
||||||
If your problem is that the git prompt just stopped appearing, you can try to force it setting the following
|
If your problem is that the git prompt just stopped appearing, you can try to force it by setting the following
|
||||||
configuration before `oh-my-zsh.sh` is sourced. If it still does not work, please open an issue with your
|
configuration before `oh-my-zsh.sh` is sourced. If it still does not work, please open an issue with your
|
||||||
case.
|
case.
|
||||||
|
|
||||||
|
|
@ -548,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
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ autoload -Uz is-at-least
|
||||||
# This API is subject to change and optimization. Rely on it at your own risk.
|
# This API is subject to change and optimization. Rely on it at your own risk.
|
||||||
|
|
||||||
function _omz_register_handler {
|
function _omz_register_handler {
|
||||||
setopt localoptions noksharrays
|
setopt localoptions noksharrays unset
|
||||||
typeset -ga _omz_async_functions
|
typeset -ga _omz_async_functions
|
||||||
# we want to do nothing if there's no $1 function or we already set it up
|
# we want to do nothing if there's no $1 function or we already set it up
|
||||||
if [[ -z "$1" ]] || (( ! ${+functions[$1]} )) \
|
if [[ -z "$1" ]] || (( ! ${+functions[$1]} )) \
|
||||||
|
|
@ -44,6 +44,7 @@ function _omz_register_handler {
|
||||||
|
|
||||||
# Set up async handlers and callbacks
|
# Set up async handlers and callbacks
|
||||||
function _omz_async_request {
|
function _omz_async_request {
|
||||||
|
setopt localoptions noksharrays unset
|
||||||
local -i ret=$?
|
local -i ret=$?
|
||||||
typeset -gA _OMZ_ASYNC_FDS _OMZ_ASYNC_PIDS _OMZ_ASYNC_OUTPUT
|
typeset -gA _OMZ_ASYNC_FDS _OMZ_ASYNC_PIDS _OMZ_ASYNC_OUTPUT
|
||||||
|
|
||||||
|
|
|
||||||
76
lib/cli.zsh
76
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'
|
||||||
|
|
@ -72,6 +73,10 @@ function _omz {
|
||||||
local -aU plugins
|
local -aU plugins
|
||||||
plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t))
|
plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t))
|
||||||
_describe 'plugin' plugins ;;
|
_describe 'plugin' plugins ;;
|
||||||
|
plugin::list)
|
||||||
|
local -a opts
|
||||||
|
opts=('--enabled:List enabled plugins only')
|
||||||
|
_describe -o 'options' opts ;;
|
||||||
theme::(set|use))
|
theme::(set|use))
|
||||||
local -aU themes
|
local -aU themes
|
||||||
themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
||||||
|
|
@ -169,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
|
||||||
|
|
@ -193,7 +199,7 @@ EOF
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
"$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format"
|
ZSH="$ZSH" command zsh -f "$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format"
|
||||||
}
|
}
|
||||||
|
|
||||||
function _omz::plugin {
|
function _omz::plugin {
|
||||||
|
|
@ -206,7 +212,7 @@ Available commands:
|
||||||
disable <plugin> Disable plugin(s)
|
disable <plugin> Disable plugin(s)
|
||||||
enable <plugin> Enable plugin(s)
|
enable <plugin> Enable plugin(s)
|
||||||
info <plugin> Get information of a plugin
|
info <plugin> Get information of a plugin
|
||||||
list List all available Oh My Zsh plugins
|
list [--enabled] List Oh My Zsh plugins
|
||||||
load <plugin> Load plugin(s)
|
load <plugin> Load plugin(s)
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
@ -449,8 +455,21 @@ function _omz::plugin::info {
|
||||||
|
|
||||||
function _omz::plugin::list {
|
function _omz::plugin::list {
|
||||||
local -a custom_plugins builtin_plugins
|
local -a custom_plugins builtin_plugins
|
||||||
custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t))
|
|
||||||
builtin_plugins=("$ZSH"/plugins/*(-/N:t))
|
# If --enabled is provided, only list what's enabled
|
||||||
|
if [[ "$1" == "--enabled" ]]; then
|
||||||
|
local plugin
|
||||||
|
for plugin in "${plugins[@]}"; do
|
||||||
|
if [[ -d "${ZSH_CUSTOM}/plugins/${plugin}" ]]; then
|
||||||
|
custom_plugins+=("${plugin}")
|
||||||
|
elif [[ -d "${ZSH}/plugins/${plugin}" ]]; then
|
||||||
|
builtin_plugins+=("${plugin}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t))
|
||||||
|
builtin_plugins=("$ZSH"/plugins/*(-/N:t))
|
||||||
|
fi
|
||||||
|
|
||||||
# If the command is being piped, print all found line by line
|
# If the command is being piped, print all found line by line
|
||||||
if [[ ! -t 1 ]]; then
|
if [[ ! -t 1 ]]; then
|
||||||
|
|
@ -604,10 +623,48 @@ function _omz::pr::test {
|
||||||
done
|
done
|
||||||
|
|
||||||
(( $found )) || {
|
(( $found )) || {
|
||||||
_omz::log error "could not found the ohmyzsh git remote. Aborting..."
|
_omz::log error "could not find the ohmyzsh git remote. Aborting..."
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check if Pull Request has the "testers needed" label
|
||||||
|
_omz::log info "checking if PR #$1 has the 'testers needed' label..."
|
||||||
|
local pr_json label label_id="MDU6TGFiZWw4NzY1NTkwNA=="
|
||||||
|
pr_json=$(
|
||||||
|
curl -fsSL \
|
||||||
|
-H "Accept: application/vnd.github+json" \
|
||||||
|
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||||
|
"https://api.github.com/repos/ohmyzsh/ohmyzsh/pulls/$1"
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ $? -gt 0 || -z "$pr_json" ]]; then
|
||||||
|
_omz::log error "error when trying to fetch PR #$1 from GitHub."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if the label is present with jq or grep
|
||||||
|
if (( $+commands[jq] )); then
|
||||||
|
label="$(command jq ".labels.[] | select(.node_id == \"$label_id\")" <<< "$pr_json")"
|
||||||
|
else
|
||||||
|
label="$(command grep "\"$label_id\"" <<< "$pr_json" 2>/dev/null)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If a maintainer hasn't labeled the PR to test, explain the security risk
|
||||||
|
if [[ -z "$label" ]]; then
|
||||||
|
_omz::log warn "PR #$1 does not have the 'testers needed' label. This means that the PR"
|
||||||
|
_omz::log warn "has not been reviewed by a maintainer and may contain malicious code."
|
||||||
|
|
||||||
|
# Ask for explicit confirmation: user needs to type "yes" to continue
|
||||||
|
_omz::log prompt "Do you want to continue testing it? [yes/N] "
|
||||||
|
builtin read -r
|
||||||
|
if [[ "${REPLY:l}" != yes ]]; then
|
||||||
|
_omz::log error "PR test canceled. Please ask a maintainer to review and label the PR."
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
_omz::log warn "Continuing to check out and test PR #$1. Be careful!"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Fetch pull request head
|
# Fetch pull request head
|
||||||
_omz::log info "fetching PR #$1 to ohmyzsh/pull-$1..."
|
_omz::log info "fetching PR #$1 to ohmyzsh/pull-$1..."
|
||||||
command git fetch -f "$remote" refs/pull/$1/head:ohmyzsh/pull-$1 || {
|
command git fetch -f "$remote" refs/pull/$1/head:ohmyzsh/pull-$1 || {
|
||||||
|
|
@ -666,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() {
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ fi
|
||||||
# disable named-directories autocompletion
|
# disable named-directories autocompletion
|
||||||
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories
|
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories
|
||||||
|
|
||||||
# Use caching so that commands like apt and dpkg complete are useable
|
# Use caching so that commands like apt and dpkg complete are usable
|
||||||
zstyle ':completion:*' use-cache yes
|
zstyle ':completion:*' use-cache yes
|
||||||
zstyle ':completion:*' cache-path $ZSH_CACHE_DIR
|
zstyle ':completion:*' cache-path $ZSH_CACHE_DIR
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,9 @@ function open_command() {
|
||||||
linux*) [[ "$(uname -r)" != *icrosoft* ]] && open_cmd='nohup xdg-open' || {
|
linux*) [[ "$(uname -r)" != *icrosoft* ]] && open_cmd='nohup xdg-open' || {
|
||||||
open_cmd='cmd.exe /c start ""'
|
open_cmd='cmd.exe /c start ""'
|
||||||
[[ -e "$1" ]] && { 1="$(wslpath -w "${1:a}")" || return 1 }
|
[[ -e "$1" ]] && { 1="$(wslpath -w "${1:a}")" || return 1 }
|
||||||
|
[[ "$1" = (http|https)://* ]] && {
|
||||||
|
1="$(echo "$1" | sed -E 's/([&|()<>^])/^\1/g')" || return 1
|
||||||
|
}
|
||||||
} ;;
|
} ;;
|
||||||
msys*) open_cmd='start ""' ;;
|
msys*) open_cmd='start ""' ;;
|
||||||
*) echo "Platform $OSTYPE not supported"
|
*) echo "Platform $OSTYPE not supported"
|
||||||
|
|
|
||||||
198
lib/git.zsh
198
lib/git.zsh
|
|
@ -39,6 +39,105 @@ function _omz_git_prompt_info() {
|
||||||
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref:gs/%/%%}${upstream:gs/%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref:gs/%/%%}${upstream:gs/%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _omz_git_prompt_status() {
|
||||||
|
[[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return
|
||||||
|
|
||||||
|
# Maps a git status prefix to an internal constant
|
||||||
|
# This cannot use the prompt constants, as they may be empty
|
||||||
|
local -A prefix_constant_map
|
||||||
|
prefix_constant_map=(
|
||||||
|
'\?\? ' 'UNTRACKED'
|
||||||
|
'A ' 'ADDED'
|
||||||
|
'M ' 'MODIFIED'
|
||||||
|
'MM ' 'MODIFIED'
|
||||||
|
' M ' 'MODIFIED'
|
||||||
|
'AM ' 'MODIFIED'
|
||||||
|
' T ' 'MODIFIED'
|
||||||
|
'R ' 'RENAMED'
|
||||||
|
' D ' 'DELETED'
|
||||||
|
'D ' 'DELETED'
|
||||||
|
'UU ' 'UNMERGED'
|
||||||
|
'ahead' 'AHEAD'
|
||||||
|
'behind' 'BEHIND'
|
||||||
|
'diverged' 'DIVERGED'
|
||||||
|
'stashed' 'STASHED'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Maps the internal constant to the prompt theme
|
||||||
|
local -A constant_prompt_map
|
||||||
|
constant_prompt_map=(
|
||||||
|
'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED"
|
||||||
|
'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED"
|
||||||
|
'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED"
|
||||||
|
'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED"
|
||||||
|
'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED"
|
||||||
|
'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED"
|
||||||
|
'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD"
|
||||||
|
'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND"
|
||||||
|
'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED"
|
||||||
|
'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The order that the prompt displays should be added to the prompt
|
||||||
|
local status_constants
|
||||||
|
status_constants=(
|
||||||
|
UNTRACKED ADDED MODIFIED RENAMED DELETED
|
||||||
|
STASHED UNMERGED AHEAD BEHIND DIVERGED
|
||||||
|
)
|
||||||
|
|
||||||
|
local status_text
|
||||||
|
status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)"
|
||||||
|
|
||||||
|
# Don't continue on a catastrophic failure
|
||||||
|
if [[ $? -eq 128 ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# A lookup table of each git status encountered
|
||||||
|
local -A statuses_seen
|
||||||
|
|
||||||
|
if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then
|
||||||
|
statuses_seen[STASHED]=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local status_lines
|
||||||
|
status_lines=("${(@f)${status_text}}")
|
||||||
|
|
||||||
|
# If the tracking line exists, get and parse it
|
||||||
|
if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then
|
||||||
|
local branch_statuses
|
||||||
|
branch_statuses=("${(@s/,/)match}")
|
||||||
|
for branch_status in $branch_statuses; do
|
||||||
|
if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
local last_parsed_status=$prefix_constant_map[$match[1]]
|
||||||
|
statuses_seen[$last_parsed_status]=$match[2]
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For each status prefix, do a regex comparison
|
||||||
|
for status_prefix in "${(@k)prefix_constant_map}"; do
|
||||||
|
local status_constant="${prefix_constant_map[$status_prefix]}"
|
||||||
|
local status_regex=$'(^|\n)'"$status_prefix"
|
||||||
|
|
||||||
|
if [[ "$status_text" =~ $status_regex ]]; then
|
||||||
|
statuses_seen[$status_constant]=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Display the seen statuses in the order specified
|
||||||
|
local status_prompt
|
||||||
|
for status_constant in $status_constants; do
|
||||||
|
if (( ${+statuses_seen[$status_constant]} )); then
|
||||||
|
local next_display=$constant_prompt_map[$status_constant]
|
||||||
|
status_prompt="$next_display$status_prompt"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo $status_prompt
|
||||||
|
}
|
||||||
|
|
||||||
# Use async version if setting is enabled, or unset but zsh version is at least 5.0.6.
|
# Use async version if setting is enabled, or unset but zsh version is at least 5.0.6.
|
||||||
# This avoids async prompt issues caused by previous zsh versions:
|
# This avoids async prompt issues caused by previous zsh versions:
|
||||||
# - https://github.com/ohmyzsh/ohmyzsh/issues/12331
|
# - https://github.com/ohmyzsh/ohmyzsh/issues/12331
|
||||||
|
|
@ -260,105 +359,6 @@ function git_prompt_long_sha() {
|
||||||
SHA=$(__git_prompt_git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER"
|
SHA=$(__git_prompt_git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER"
|
||||||
}
|
}
|
||||||
|
|
||||||
function _omz_git_prompt_status() {
|
|
||||||
[[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return
|
|
||||||
|
|
||||||
# Maps a git status prefix to an internal constant
|
|
||||||
# This cannot use the prompt constants, as they may be empty
|
|
||||||
local -A prefix_constant_map
|
|
||||||
prefix_constant_map=(
|
|
||||||
'\?\? ' 'UNTRACKED'
|
|
||||||
'A ' 'ADDED'
|
|
||||||
'M ' 'MODIFIED'
|
|
||||||
'MM ' 'MODIFIED'
|
|
||||||
' M ' 'MODIFIED'
|
|
||||||
'AM ' 'MODIFIED'
|
|
||||||
' T ' 'MODIFIED'
|
|
||||||
'R ' 'RENAMED'
|
|
||||||
' D ' 'DELETED'
|
|
||||||
'D ' 'DELETED'
|
|
||||||
'UU ' 'UNMERGED'
|
|
||||||
'ahead' 'AHEAD'
|
|
||||||
'behind' 'BEHIND'
|
|
||||||
'diverged' 'DIVERGED'
|
|
||||||
'stashed' 'STASHED'
|
|
||||||
)
|
|
||||||
|
|
||||||
# Maps the internal constant to the prompt theme
|
|
||||||
local -A constant_prompt_map
|
|
||||||
constant_prompt_map=(
|
|
||||||
'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED"
|
|
||||||
'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED"
|
|
||||||
'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED"
|
|
||||||
'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED"
|
|
||||||
'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED"
|
|
||||||
'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED"
|
|
||||||
'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD"
|
|
||||||
'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND"
|
|
||||||
'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED"
|
|
||||||
'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED"
|
|
||||||
)
|
|
||||||
|
|
||||||
# The order that the prompt displays should be added to the prompt
|
|
||||||
local status_constants
|
|
||||||
status_constants=(
|
|
||||||
UNTRACKED ADDED MODIFIED RENAMED DELETED
|
|
||||||
STASHED UNMERGED AHEAD BEHIND DIVERGED
|
|
||||||
)
|
|
||||||
|
|
||||||
local status_text
|
|
||||||
status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)"
|
|
||||||
|
|
||||||
# Don't continue on a catastrophic failure
|
|
||||||
if [[ $? -eq 128 ]]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# A lookup table of each git status encountered
|
|
||||||
local -A statuses_seen
|
|
||||||
|
|
||||||
if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then
|
|
||||||
statuses_seen[STASHED]=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local status_lines
|
|
||||||
status_lines=("${(@f)${status_text}}")
|
|
||||||
|
|
||||||
# If the tracking line exists, get and parse it
|
|
||||||
if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then
|
|
||||||
local branch_statuses
|
|
||||||
branch_statuses=("${(@s/,/)match}")
|
|
||||||
for branch_status in $branch_statuses; do
|
|
||||||
if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
local last_parsed_status=$prefix_constant_map[$match[1]]
|
|
||||||
statuses_seen[$last_parsed_status]=$match[2]
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For each status prefix, do a regex comparison
|
|
||||||
for status_prefix in ${(k)prefix_constant_map}; do
|
|
||||||
local status_constant="${prefix_constant_map[$status_prefix]}"
|
|
||||||
local status_regex=$'(^|\n)'"$status_prefix"
|
|
||||||
|
|
||||||
if [[ "$status_text" =~ $status_regex ]]; then
|
|
||||||
statuses_seen[$status_constant]=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Display the seen statuses in the order specified
|
|
||||||
local status_prompt
|
|
||||||
for status_constant in $status_constants; do
|
|
||||||
if (( ${+statuses_seen[$status_constant]} )); then
|
|
||||||
local next_display=$constant_prompt_map[$status_constant]
|
|
||||||
status_prompt="$next_display$status_prompt"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo $status_prompt
|
|
||||||
}
|
|
||||||
|
|
||||||
# Outputs the name of the current user
|
# Outputs the name of the current user
|
||||||
# Usage example: $(git_current_user_name)
|
# Usage example: $(git_current_user_name)
|
||||||
function git_current_user_name() {
|
function git_current_user_name() {
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,10 @@ function omz_history {
|
||||||
print -u2 History file deleted.
|
print -u2 History file deleted.
|
||||||
elif [[ $# -eq 0 ]]; then
|
elif [[ $# -eq 0 ]]; then
|
||||||
# if no arguments provided, show full history starting from 1
|
# if no arguments provided, show full history starting from 1
|
||||||
builtin fc $stamp -l 1
|
builtin fc "${stamp[@]}" -l 1
|
||||||
else
|
else
|
||||||
# otherwise, run `fc -l` with a custom format
|
# otherwise, run `fc -l` with a custom format
|
||||||
builtin fc $stamp -l "$@"
|
builtin fc "${stamp[@]}" -l "$@"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -112,12 +112,12 @@ bindkey -M vicmd '^[[1;5D' backward-word
|
||||||
|
|
||||||
|
|
||||||
bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark
|
bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark
|
||||||
bindkey -s '\el' 'ls\n' # [Esc-l] - run command: ls
|
bindkey -s '\el' '^q ls\n' # [Esc-l] - run command: ls
|
||||||
bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
|
bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
|
||||||
bindkey ' ' magic-space # [Space] - don't do history expansion
|
bindkey ' ' magic-space # [Space] - don't do history expansion
|
||||||
|
|
||||||
|
|
||||||
# Edit the current command line in $EDITOR
|
# Edit the current command line in $VISUAL (or $EDITOR / `vi` if not set)
|
||||||
autoload -U edit-command-line
|
autoload -U edit-command-line
|
||||||
zle -N edit-command-line
|
zle -N edit-command-line
|
||||||
bindkey '\C-x\C-e' edit-command-line
|
bindkey '\C-x\C-e' edit-command-line
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ function title {
|
||||||
: ${2=$1}
|
: ${2=$1}
|
||||||
|
|
||||||
case "$TERM" in
|
case "$TERM" in
|
||||||
cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty*|st*|foot*|contour*)
|
cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty*|st*|foot*|contour*|wezterm*)
|
||||||
print -Pn "\e]2;${2:q}\a" # set window name
|
print -Pn "\e]2;${2:q}\a" # set window name
|
||||||
print -Pn "\e]1;${1:q}\a" # set tab name
|
print -Pn "\e]1;${1:q}\a" # set tab name
|
||||||
;;
|
;;
|
||||||
|
|
@ -47,13 +47,13 @@ fi
|
||||||
|
|
||||||
# Runs before showing the prompt
|
# Runs before showing the prompt
|
||||||
function omz_termsupport_precmd {
|
function omz_termsupport_precmd {
|
||||||
[[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return
|
[[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0
|
||||||
title "$ZSH_THEME_TERM_TAB_TITLE_IDLE" "$ZSH_THEME_TERM_TITLE_IDLE"
|
title "$ZSH_THEME_TERM_TAB_TITLE_IDLE" "$ZSH_THEME_TERM_TITLE_IDLE"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Runs before executing the command
|
# Runs before executing the command
|
||||||
function omz_termsupport_preexec {
|
function omz_termsupport_preexec {
|
||||||
[[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return
|
[[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0
|
||||||
|
|
||||||
emulate -L zsh
|
emulate -L zsh
|
||||||
setopt extended_glob
|
setopt extended_glob
|
||||||
|
|
@ -145,6 +145,7 @@ esac
|
||||||
# Identifies the directory using a file: URI scheme, including
|
# Identifies the directory using a file: URI scheme, including
|
||||||
# the host name to disambiguate local vs. remote paths.
|
# the host name to disambiguate local vs. remote paths.
|
||||||
function omz_termsupport_cwd {
|
function omz_termsupport_cwd {
|
||||||
|
setopt localoptions unset
|
||||||
# Percent-encode the host and path names.
|
# Percent-encode the host and path names.
|
||||||
local URL_HOST URL_PATH
|
local URL_HOST URL_PATH
|
||||||
URL_HOST="$(omz_urlencode -P $HOST)" || return 1
|
URL_HOST="$(omz_urlencode -P $HOST)" || return 1
|
||||||
|
|
|
||||||
|
|
@ -99,8 +99,8 @@ done
|
||||||
|
|
||||||
# Figure out the SHORT hostname
|
# Figure out the SHORT hostname
|
||||||
if [[ "$OSTYPE" = darwin* ]]; then
|
if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
# macOS's $HOST changes with dhcp, etc. Use ComputerName if possible.
|
# macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible.
|
||||||
SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST="${HOST/.*/}"
|
SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) || SHORT_HOST="${HOST/.*/}"
|
||||||
else
|
else
|
||||||
SHORT_HOST="${HOST/.*/}"
|
SHORT_HOST="${HOST/.*/}"
|
||||||
fi
|
fi
|
||||||
|
|
@ -192,7 +192,7 @@ _omz_source() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Load all of the lib files in ~/oh-my-zsh/lib that end in .zsh
|
# Load all of the lib files in ~/.oh-my-zsh/lib that end in .zsh
|
||||||
# TIP: Add files you don't want in git to .gitignore
|
# TIP: Add files you don't want in git to .gitignore
|
||||||
for lib_file ("$ZSH"/lib/*.zsh); do
|
for lib_file ("$ZSH"/lib/*.zsh); do
|
||||||
_omz_source "lib/${lib_file:t}"
|
_omz_source "lib/${lib_file:t}"
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ plugins=(... alias-finder)
|
||||||
|
|
||||||
To enable it for every single command, set zstyle in your `~/.zshrc`.
|
To enable it for every single command, set zstyle in your `~/.zshrc`.
|
||||||
|
|
||||||
|
If the user has installed `rg`([ripgrep](https://github.com/BurntSushi/ripgrep)), it will be used because it's faster. Otherwise, it will use the `grep` command.
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
# ~/.zshrc
|
# ~/.zshrc
|
||||||
|
|
||||||
|
|
@ -28,7 +30,7 @@ When you execute a command alias finder will look at your defined aliases and su
|
||||||
|
|
||||||
Running the un-aliased `git status` command:
|
Running the un-aliased `git status` command:
|
||||||
```sh
|
```sh
|
||||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||||
╰─$ git status
|
╰─$ git status
|
||||||
|
|
||||||
gst='git status' # <=== shorter suggestion from alias-finder
|
gst='git status' # <=== shorter suggestion from alias-finder
|
||||||
|
|
@ -40,7 +42,7 @@ nothing to commit, working tree clean
|
||||||
|
|
||||||
Running a shorter `git st` alias from `.gitconfig` that it suggested :
|
Running a shorter `git st` alias from `.gitconfig` that it suggested :
|
||||||
```sh
|
```sh
|
||||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||||
╰─$ git st
|
╰─$ git st
|
||||||
gs='git st' # <=== shorter suggestion from alias-finder
|
gs='git st' # <=== shorter suggestion from alias-finder
|
||||||
## main...origin/main
|
## main...origin/main
|
||||||
|
|
@ -48,7 +50,7 @@ gs='git st' # <=== shorter suggestion from alias-finder
|
||||||
|
|
||||||
Running the shortest `gs` shell alias that it found:
|
Running the shortest `gs` shell alias that it found:
|
||||||
```sh
|
```sh
|
||||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||||
╰─$ gs
|
╰─$ gs
|
||||||
# <=== no suggestions alias-finder because this is the shortest
|
# <=== no suggestions alias-finder because this is the shortest
|
||||||
## main...origin/main
|
## main...origin/main
|
||||||
|
|
|
||||||
|
|
@ -36,14 +36,22 @@ alias-finder() {
|
||||||
# make filter to find only shorter results than current cmd
|
# make filter to find only shorter results than current cmd
|
||||||
if [[ $cheaper == true ]]; then
|
if [[ $cheaper == true ]]; then
|
||||||
cmdLen=$(echo -n "$cmd" | wc -c)
|
cmdLen=$(echo -n "$cmd" | wc -c)
|
||||||
filter="^'{0,1}.{0,$((cmdLen - 1))}="
|
if [[ $cmdLen -le 1 ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
filter="^'?.{1,$((cmdLen - 1))}'?=" # some aliases is surrounded by single quotes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
alias | grep -E "$filter" | grep -E "=$finder"
|
if (( $+commands[rg] )); then
|
||||||
|
alias | rg "$filter" | rg "=$finder"
|
||||||
|
else
|
||||||
|
alias | grep -E "$filter" | grep -E "=$finder"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ $exact == true ]]; then
|
if [[ $exact == true ]]; then
|
||||||
break # because exact case is only one
|
break # because exact case is only one
|
||||||
elif [[ $longer = true ]]; then
|
elif [[ $longer == true ]]; then
|
||||||
break # because above grep command already found every longer aliases during first cycle
|
break # because above grep command already found every longer aliases during first cycle
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,26 +178,27 @@ fi
|
||||||
|
|
||||||
# Check Arch Linux PGP Keyring before System Upgrade to prevent failure.
|
# Check Arch Linux PGP Keyring before System Upgrade to prevent failure.
|
||||||
function upgrade() {
|
function upgrade() {
|
||||||
|
sudo pacman -Sy
|
||||||
echo ":: Checking Arch Linux PGP Keyring..."
|
echo ":: Checking Arch Linux PGP Keyring..."
|
||||||
local installedver="$(LANG= sudo pacman -Qi archlinux-keyring | grep -Po '(?<=Version : ).*')"
|
local installedver="$(LANG= sudo pacman -Qi archlinux-keyring | grep -Po '(?<=Version : ).*')"
|
||||||
local currentver="$(LANG= sudo pacman -Si archlinux-keyring | grep -Po '(?<=Version : ).*')"
|
local currentver="$(LANG= sudo pacman -Si archlinux-keyring | grep -Po '(?<=Version : ).*')"
|
||||||
if [ $installedver != $currentver ]; then
|
if [ $installedver != $currentver ]; then
|
||||||
echo " Arch Linux PGP Keyring is out of date."
|
echo " Arch Linux PGP Keyring is out of date."
|
||||||
echo " Updating before full system upgrade."
|
echo " Updating before full system upgrade."
|
||||||
sudo pacman -Sy --needed --noconfirm archlinux-keyring
|
sudo pacman -S --needed --noconfirm archlinux-keyring
|
||||||
else
|
else
|
||||||
echo " Arch Linux PGP Keyring is up to date."
|
echo " Arch Linux PGP Keyring is up to date."
|
||||||
echo " Proceeding with full system upgrade."
|
echo " Proceeding with full system upgrade."
|
||||||
fi
|
fi
|
||||||
if (( $+commands[yay] )); then
|
if (( $+commands[yay] )); then
|
||||||
yay -Syu
|
yay -Su
|
||||||
elif (( $+commands[trizen] )); then
|
elif (( $+commands[trizen] )); then
|
||||||
trizen -Syu
|
trizen -Su
|
||||||
elif (( $+commands[pacaur] )); then
|
elif (( $+commands[pacaur] )); then
|
||||||
pacaur -Syu
|
pacaur -Su
|
||||||
elif (( $+commands[aura] )); then
|
elif (( $+commands[aura] )); then
|
||||||
sudo aura -Syu
|
sudo aura -Su
|
||||||
else
|
else
|
||||||
sudo pacman -Syu
|
sudo pacman -Su
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,48 @@
|
||||||
## asdf
|
# asdf
|
||||||
|
|
||||||
Adds integration with [asdf](https://github.com/asdf-vm/asdf), the extendable version manager, with support for Ruby, Node.js, Elixir, Erlang and more.
|
Adds integration with [asdf](https://github.com/asdf-vm/asdf), the extendable version manager, with support for Ruby, Node.js, Elixir, Erlang and more.
|
||||||
|
|
||||||
### Installation
|
## Installation
|
||||||
|
|
||||||
1. [Download asdf](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf) by running the following:
|
1. [Install](https://asdf-vm.com/guide/getting-started.html#_1-install-asdf) asdf and ensure that's it's discoverable on `$PATH`;
|
||||||
|
2. Enable it by adding it to your `plugins` definition in `~/.zshrc`:
|
||||||
```
|
|
||||||
git clone https://github.com/asdf-vm/asdf.git ~/.asdf
|
|
||||||
```
|
|
||||||
|
|
||||||
2. [Enable asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf) by adding it to your `plugins` definition in `~/.zshrc`.
|
|
||||||
|
|
||||||
```
|
|
||||||
plugins=(asdf)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Usage
|
|
||||||
|
|
||||||
See the [asdf documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to use asdf:
|
|
||||||
|
|
||||||
|
```sh
|
||||||
|
plugins=(asdf)
|
||||||
```
|
```
|
||||||
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Refer to the [asdf plugin documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to add a plugin and install the many runtime versions for it.
|
||||||
|
|
||||||
|
Example for installing the nodejs plugin and the many runtimes for it:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Add plugin to asdf
|
||||||
|
asdf plugin add nodejs
|
||||||
|
|
||||||
|
# Install the latest available version
|
||||||
asdf install nodejs latest
|
asdf install nodejs latest
|
||||||
asdf global nodejs latest
|
|
||||||
asdf local nodejs latest
|
# Uninstall the latest version
|
||||||
|
asdf uninstall nodejs latest
|
||||||
|
|
||||||
|
# Install a specific version
|
||||||
|
asdf install nodejs 16.5.0
|
||||||
|
|
||||||
|
# Set the latest version in .tool-versions of the `current directory`
|
||||||
|
asdf set nodejs latest
|
||||||
|
|
||||||
|
# Set a specific version in the `parent directory`
|
||||||
|
asdf set -p nodejs 16.5.0 # -p is shorthand for --parent
|
||||||
|
|
||||||
|
# Set a global version under `$HOME`
|
||||||
|
asdf set -u nodejs 16.5.0 # -u is shorthand for --home
|
||||||
```
|
```
|
||||||
|
|
||||||
### Maintainer
|
For more commands, run `asdf help` or refer to the
|
||||||
|
[asdf CLI documentation](https://asdf-vm.com/manage/commands.html#all-commands).
|
||||||
|
|
||||||
|
## Maintainer
|
||||||
|
|
||||||
- [@RobLoach](https://github.com/RobLoach)
|
- [@RobLoach](https://github.com/RobLoach)
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,15 @@
|
||||||
if (( $+commands[asdf] )); then
|
(( ! $+commands[asdf] )) && return
|
||||||
export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}"
|
|
||||||
path=("$ASDF_DATA_DIR/shims" $path)
|
|
||||||
|
|
||||||
# If the completion file doesn't exist yet, we need to autoload it and
|
export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}"
|
||||||
# bind it to `asdf`. Otherwise, compinit will have already done that.
|
|
||||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
|
|
||||||
typeset -g -A _comps
|
|
||||||
autoload -Uz _asdf
|
|
||||||
_comps[asdf]=_asdf
|
|
||||||
fi
|
|
||||||
asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|
|
|
||||||
|
|
||||||
return
|
# Add shims to the front of the path, removing if already present.
|
||||||
fi
|
path=("$ASDF_DATA_DIR/shims" ${path:#$ASDF_DATA_DIR/shims})
|
||||||
|
|
||||||
# TODO:(2025-02-12): remove deprecated asdf <0.16 code
|
# If the completion file doesn't exist yet, we need to autoload it and
|
||||||
|
# bind it to `asdf`. Otherwise, compinit will have already done that.
|
||||||
# Find where asdf should be installed
|
if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
|
||||||
ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}"
|
typeset -g -A _comps
|
||||||
ASDF_COMPLETIONS="$ASDF_DIR/completions"
|
autoload -Uz _asdf
|
||||||
|
_comps[asdf]=_asdf
|
||||||
if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then
|
|
||||||
# If not found, check for archlinux/AUR package (/opt/asdf-vm/)
|
|
||||||
if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
|
|
||||||
ASDF_DIR="/opt/asdf-vm"
|
|
||||||
ASDF_COMPLETIONS="$ASDF_DIR"
|
|
||||||
# If not found, check for Homebrew package
|
|
||||||
elif (( $+commands[brew] )); then
|
|
||||||
_ASDF_PREFIX="$(brew --prefix asdf)"
|
|
||||||
ASDF_DIR="${_ASDF_PREFIX}/libexec"
|
|
||||||
ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions"
|
|
||||||
unset _ASDF_PREFIX
|
|
||||||
else
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Load command
|
|
||||||
if [[ -f "$ASDF_DIR/asdf.sh" ]]; then
|
|
||||||
source "$ASDF_DIR/asdf.sh"
|
|
||||||
# Load completions
|
|
||||||
if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then
|
|
||||||
fpath+=("$ASDF_COMPLETIONS")
|
|
||||||
autoload -Uz _asdf
|
|
||||||
compdef _asdf asdf # compdef is already loaded before loading plugins
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,12 @@ For example:
|
||||||
BATTERY_CHARGING="⚡️"
|
BATTERY_CHARGING="⚡️"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can see the power of your charger using the following setting (MacOS only)
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
BATTERY_SHOW_WATTS=true
|
||||||
|
```
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
- On Linux, you must have the `acpi` or `acpitool` commands installed on your operating system.
|
- On Linux, you must have the `acpi` or `acpitool` commands installed on your operating system.
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,13 @@
|
||||||
# Modified to add support for OpenBSD #
|
# Modified to add support for OpenBSD #
|
||||||
###########################################
|
###########################################
|
||||||
|
|
||||||
|
: ${BATTERY_SHOW_WATTS:=false}
|
||||||
|
|
||||||
|
|
||||||
if [[ "$OSTYPE" = darwin* ]]; then
|
if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
|
function get_charger_power() {
|
||||||
|
echo "$(ioreg -rc AppleSmartBattery | grep -o '"Watts"=[0-9]\+' | head -1 | grep -o '[0-9]\+')W "
|
||||||
|
}
|
||||||
function battery_is_charging() {
|
function battery_is_charging() {
|
||||||
ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ Yes'
|
ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ Yes'
|
||||||
}
|
}
|
||||||
|
|
@ -58,7 +63,10 @@ if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
fi
|
fi
|
||||||
echo "%{$fg[$color]%}[${battery_pct}%%]%{$reset_color%}"
|
echo "%{$fg[$color]%}[${battery_pct}%%]%{$reset_color%}"
|
||||||
else
|
else
|
||||||
echo "${BATTERY_CHARGING-⚡️}"
|
if [[ "${BATTERY_SHOW_WATTS}" = "true" ]] ; then
|
||||||
|
watts=$(get_charger_power)
|
||||||
|
fi
|
||||||
|
echo "${watts}${BATTERY_CHARGING-⚡️}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,11 @@ function bgnotify_formatted {
|
||||||
}
|
}
|
||||||
|
|
||||||
function bgnotify_appid {
|
function bgnotify_appid {
|
||||||
if (( ${+commands[osascript]} )); then
|
if (( ${+commands[lsappinfo]} )); then
|
||||||
osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null
|
lsappinfo info -only bundleid "$(lsappinfo front)" | awk -F= '{print $2}' | tr -d '"' 2>/dev/null
|
||||||
elif [[ -n $WAYLAND_DISPLAY ]] && (( ${+commands[swaymsg]} )); then # wayland+sway
|
elif (( ${+commands[osascript]} )); then
|
||||||
|
osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null
|
||||||
|
elif [[ -n $WAYLAND_DISPLAY ]] && ([[ -n $SWAYSOCK ]] || [[ -n $I3SOCK ]]) && (( ${+commands[swaymsg]} )); then # wayland+sway
|
||||||
local app_id=$(bgnotify_find_sway_appid)
|
local app_id=$(bgnotify_find_sway_appid)
|
||||||
[[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS
|
[[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS
|
||||||
elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then
|
elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then
|
||||||
|
|
@ -108,6 +110,7 @@ function bgnotify_programid {
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
iTerm.app) echo 'com.googlecode.iterm2' ;;
|
iTerm.app) echo 'com.googlecode.iterm2' ;;
|
||||||
Apple_Terminal) echo 'com.apple.terminal' ;;
|
Apple_Terminal) echo 'com.apple.terminal' ;;
|
||||||
|
ghostty) echo 'com.mitchellh.ghostty' ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ function branch_prompt_info() {
|
||||||
while [[ "$dir" != '/' ]]; do
|
while [[ "$dir" != '/' ]]; do
|
||||||
# Found .git directory
|
# Found .git directory
|
||||||
if [[ -d "${dir}/.git" ]]; then
|
if [[ -d "${dir}/.git" ]]; then
|
||||||
branch="${"$(<"${dir}/.git/HEAD")"##*/}"
|
branch="${"$(<"${dir}/.git/HEAD")"##ref: refs/heads/}"
|
||||||
echo '±' "${branch:gs/%/%%}"
|
echo '±' "${branch:gs/%/%%}"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen
|
||||||
| Alias | Command | Description |
|
| Alias | Command | Description |
|
||||||
| -------- | --------------------------------------- | --------------------------------------------------------------------- |
|
| -------- | --------------------------------------- | --------------------------------------------------------------------- |
|
||||||
| `ba` | `brew autoremove` | Uninstall unnecessary formulae. |
|
| `ba` | `brew autoremove` | Uninstall unnecessary formulae. |
|
||||||
|
| `bcfg` | `brew config` | Show Homebrew and system configuration info useful for debugging. |
|
||||||
| `bci` | `brew info --cask` | Display information about the given cask. |
|
| `bci` | `brew info --cask` | Display information about the given cask. |
|
||||||
| `bcin` | `brew install --cask` | Install the given cask. |
|
| `bcin` | `brew install --cask` | Install the given cask. |
|
||||||
| `bcl` | `brew list --cask` | List installed casks. |
|
| `bcl` | `brew list --cask` | List installed casks. |
|
||||||
|
|
@ -31,6 +32,7 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen
|
||||||
| `bcubc` | `brew upgrade --cask && brew cleanup` | Upgrade outdated casks, then run cleanup. |
|
| `bcubc` | `brew upgrade --cask && brew cleanup` | Upgrade outdated casks, then run cleanup. |
|
||||||
| `bcubo` | `brew update && brew outdated --cask` | Update Homebrew data, then list outdated casks. |
|
| `bcubo` | `brew update && brew outdated --cask` | Update Homebrew data, then list outdated casks. |
|
||||||
| `bcup` | `brew upgrade --cask` | Upgrade all outdated casks. |
|
| `bcup` | `brew upgrade --cask` | Upgrade all outdated casks. |
|
||||||
|
| `bdr` | `brew doctor` | Check your system for potential problems. |
|
||||||
| `bfu` | `brew upgrade --formula` | Upgrade only formulae (not casks). |
|
| `bfu` | `brew upgrade --formula` | Upgrade only formulae (not casks). |
|
||||||
| `bi` | `brew install` | Install a formula. |
|
| `bi` | `brew install` | Install a formula. |
|
||||||
| `bl` | `brew list` | List all installed formulae. |
|
| `bl` | `brew list` | List all installed formulae. |
|
||||||
|
|
@ -38,6 +40,7 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen
|
||||||
| `brewp` | `brew pin` | Pin a specified formula so that it's not upgraded. |
|
| `brewp` | `brew pin` | Pin a specified formula so that it's not upgraded. |
|
||||||
| `brews` | `brew list -1` | List installed formulae or the installed files for a given formula. |
|
| `brews` | `brew list -1` | List installed formulae or the installed files for a given formula. |
|
||||||
| `brewsp` | `brew list --pinned` | List pinned formulae, or show the version of a given formula. |
|
| `brewsp` | `brew list --pinned` | List pinned formulae, or show the version of a given formula. |
|
||||||
|
| `bs` | `brew search` | Perform a substring search of cask tokens and formula names for text. |
|
||||||
| `bsl` | `brew services list` | List all running services. |
|
| `bsl` | `brew services list` | List all running services. |
|
||||||
| `bsoff` | `brew services stop` | Stop the service and unregister it from launching at login (or boot). |
|
| `bsoff` | `brew services stop` | Stop the service and unregister it from launching at login (or boot). |
|
||||||
| `bsoffa` | `bsoff --all` | Stop all started services. |
|
| `bsoffa` | `bsoff --all` | Stop all started services. |
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ if [[ -d "$HOMEBREW_PREFIX/share/zsh/site-functions" ]]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
alias ba='brew autoremove'
|
alias ba='brew autoremove'
|
||||||
|
alias bcfg='brew config'
|
||||||
alias bci='brew info --cask'
|
alias bci='brew info --cask'
|
||||||
alias bcin='brew install --cask'
|
alias bcin='brew install --cask'
|
||||||
alias bcl='brew list --cask'
|
alias bcl='brew list --cask'
|
||||||
|
|
@ -44,12 +45,14 @@ alias bcrin='brew reinstall --cask'
|
||||||
alias bcubc='brew upgrade --cask && brew cleanup'
|
alias bcubc='brew upgrade --cask && brew cleanup'
|
||||||
alias bcubo='brew update && brew outdated --cask'
|
alias bcubo='brew update && brew outdated --cask'
|
||||||
alias bcup='brew upgrade --cask'
|
alias bcup='brew upgrade --cask'
|
||||||
|
alias bdr='brew doctor'
|
||||||
alias bfu='brew upgrade --formula'
|
alias bfu='brew upgrade --formula'
|
||||||
alias bi='brew install'
|
alias bi='brew install'
|
||||||
alias bl='brew list'
|
alias bl='brew list'
|
||||||
alias bo='brew outdated'
|
alias bo='brew outdated'
|
||||||
alias brewp='brew pin'
|
alias brewp='brew pin'
|
||||||
alias brewsp='brew list --pinned'
|
alias brewsp='brew list --pinned'
|
||||||
|
alias bs='brew search'
|
||||||
alias bsl='brew services list'
|
alias bsl='brew services list'
|
||||||
alias bsoff='brew services stop'
|
alias bsoff='brew services stop'
|
||||||
alias bsoffa='bsoff --all'
|
alias bsoffa='bsoff --all'
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,13 @@ _source-from-omz-settings() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_source-from-default-location() {
|
||||||
|
[[ -r /usr/local/share/chruby/chruby.sh ]] || return 1
|
||||||
|
|
||||||
|
source /usr/local/share/chruby/chruby.sh
|
||||||
|
source /usr/local/share/chruby/auto.sh
|
||||||
|
}
|
||||||
|
|
||||||
_source-from-homebrew() {
|
_source-from-homebrew() {
|
||||||
(( $+commands[brew] )) || return 1
|
(( $+commands[brew] )) || return 1
|
||||||
|
|
||||||
|
|
@ -36,27 +43,14 @@ _source-from-homebrew() {
|
||||||
source $_brew_prefix/share/chruby/auto.sh
|
source $_brew_prefix/share/chruby/auto.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
_load-chruby-dirs() {
|
|
||||||
local dir
|
|
||||||
for dir in "$HOME/.rubies" "$PREFIX/opt/rubies"; do
|
|
||||||
if [[ -d "$dir" ]]; then
|
|
||||||
RUBIES+=("$dir")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Load chruby
|
# Load chruby
|
||||||
if _source-from-omz-settings; then
|
_source-from-omz-settings || \
|
||||||
_load-chruby-dirs
|
_source-from-default-location || \
|
||||||
elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then
|
_source-from-homebrew
|
||||||
source /usr/local/share/chruby/chruby.sh
|
|
||||||
source /usr/local/share/chruby/auto.sh
|
|
||||||
_load-chruby-dirs
|
|
||||||
elif _source-from-homebrew; then
|
|
||||||
_load-chruby-dirs
|
|
||||||
fi
|
|
||||||
|
|
||||||
unfunction _source-from-homebrew _source-from-omz-settings _load-chruby-dirs
|
unfunction _source-from-homebrew \
|
||||||
|
_source-from-default-location \
|
||||||
|
_source-from-omz-settings
|
||||||
|
|
||||||
|
|
||||||
## chruby utility functions and aliases
|
## chruby utility functions and aliases
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,10 @@ for file (
|
||||||
# Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
|
# Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
|
||||||
/usr/share/doc/pkgfile/command-not-found.zsh
|
/usr/share/doc/pkgfile/command-not-found.zsh
|
||||||
# Homebrew: https://github.com/Homebrew/homebrew-command-not-found
|
# Homebrew: https://github.com/Homebrew/homebrew-command-not-found
|
||||||
|
/opt/homebrew/Library/Homebrew/command-not-found/handler.sh
|
||||||
|
/usr/local/Homebrew/Library/Homebrew/command-not-found/handler.sh
|
||||||
|
/home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/command-not-found/handler.sh
|
||||||
|
# Old homebrew implementation
|
||||||
/opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
/opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
||||||
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
||||||
/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
||||||
|
|
|
||||||
|
|
@ -114,13 +114,13 @@ that file will be open with `acroread`.
|
||||||
|
|
||||||
### Listing files inside a packed file
|
### Listing files inside a packed file
|
||||||
|
|
||||||
| Alias | Command | Description |
|
| Alias | Command | Description |
|
||||||
| ------ | ---------- | --------------------------------- |
|
| ------ | ------------ | --------------------------------- |
|
||||||
| zip | `unzip -l` | Lists files inside a .zip file |
|
| zip | `unzip -l` | Lists files inside a .zip file |
|
||||||
| rar | `unrar l` | Lists files inside a .rar file |
|
| rar | `unrar l` | Lists files inside a .rar file |
|
||||||
| tar | `tar tf` | Lists files inside a .tar file |
|
| tar | `tar tf` | Lists files inside a .tar file |
|
||||||
| tar.gz | `echo` | Lists files inside a .tar.gz file |
|
| tar.gz | `tar -ztf` | Lists files inside a .tar.gz file |
|
||||||
| ace | `unace l` | Lists files inside a .ace file |
|
| ace | `unace l` | Lists files inside a .ace file |
|
||||||
|
|
||||||
### Some other features
|
### Some other features
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ alias cnl='conda list'
|
||||||
alias cnle='conda list --export'
|
alias cnle='conda list --export'
|
||||||
alias cnles='conda list --explicit > spec-file.txt'
|
alias cnles='conda list --explicit > spec-file.txt'
|
||||||
alias cnr='conda remove'
|
alias cnr='conda remove'
|
||||||
alias cnrn='conda remove -y -all -n'
|
alias cnrn='conda remove -y --all -n'
|
||||||
alias cnrp='conda remove -y -all -p'
|
alias cnrp='conda remove -y --all -p'
|
||||||
alias cnry='conda remove -y'
|
alias cnry='conda remove -y'
|
||||||
alias cnsr='conda search'
|
alias cnsr='conda search'
|
||||||
alias cnu='conda update'
|
alias cnu='conda update'
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,19 @@
|
||||||
# Copies the contents of a given file to the system or X Windows clipboard
|
# Copies the contents of a given file to the system or X Windows clipboard
|
||||||
#
|
#
|
||||||
# copyfile <file>
|
# Usage: copyfile <file>
|
||||||
function copyfile {
|
function copyfile {
|
||||||
emulate -L zsh
|
emulate -L zsh
|
||||||
|
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
echo "Usage: copyfile <file>"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$1" ]]; then
|
||||||
|
echo "Error: '$1' is not a valid file."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
clipcopy $1
|
clipcopy $1
|
||||||
|
echo ${(%):-"%B$1%b copied to clipboard."}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,9 +83,9 @@ else
|
||||||
}
|
}
|
||||||
alias ac="su -ls '$apt_pref clean' root"
|
alias ac="su -ls '$apt_pref clean' root"
|
||||||
alias ad="su -lc '$apt_pref update' root"
|
alias ad="su -lc '$apt_pref update' root"
|
||||||
alias adg="su -lc '$apt_pref update && aptitude $apt_upgr' root"
|
alias adg="su -lc '$apt_pref update && $apt_pref $apt_upgr' root"
|
||||||
alias adu="su -lc '$apt_pref update && aptitude dist-upgrade' root"
|
alias adu="su -lc '$apt_pref update && $apt_pref dist-upgrade' root"
|
||||||
alias afu="su -lc '$apt-file update'"
|
alias afu="su -lc 'apt-file update'"
|
||||||
alias au="su -lc '$apt_pref $apt_upgr' root"
|
alias au="su -lc '$apt_pref $apt_upgr' root"
|
||||||
function ai() {
|
function ai() {
|
||||||
cmd="su -lc '$apt_pref install $@' root"
|
cmd="su -lc '$apt_pref install $@' root"
|
||||||
|
|
|
||||||
|
|
@ -60,3 +60,46 @@ to `/usr` again.
|
||||||
After that, <kbd>Alt</kbd> + <kbd>Down</kbd> will probably go to `/usr/bin` if `bin` is the first directory in alphabetical
|
After that, <kbd>Alt</kbd> + <kbd>Down</kbd> will probably go to `/usr/bin` if `bin` is the first directory in alphabetical
|
||||||
order (depends on your `/usr` folder structure). <kbd>Alt</kbd> + <kbd>Up</kbd> will return to `/usr`, and once more will get
|
order (depends on your `/usr` folder structure). <kbd>Alt</kbd> + <kbd>Up</kbd> will return to `/usr`, and once more will get
|
||||||
you to the root folder (`/`).
|
you to the root folder (`/`).
|
||||||
|
|
||||||
|
### cde
|
||||||
|
|
||||||
|
This plugin also provides a `cde` alias that allows you to change to a directory without clearing the next directory stack.
|
||||||
|
This changes the default behavior of `dirhistory`, which is to clear the next directory stack when changing directories.
|
||||||
|
|
||||||
|
For example, if the shell was started, and the following commands were entered:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd ~
|
||||||
|
cd /usr
|
||||||
|
cd share
|
||||||
|
cd doc
|
||||||
|
|
||||||
|
# <Alt + Left>
|
||||||
|
# <Alt + Left>
|
||||||
|
```
|
||||||
|
|
||||||
|
The directory stack would look like this:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
➜ /usr typeset -pm dirhistory_\*
|
||||||
|
typeset -ax dirhistory_past=( /home/user /usr )
|
||||||
|
typeset -ax dirhistory_future=( /usr/share/doc /usr/share )
|
||||||
|
```
|
||||||
|
|
||||||
|
This means that pressing <kbd>Alt</kbd> + <kbd>Right</kbd>, you'd go to `/usr/share` and `/usr/share/doc` (the "future" directories).
|
||||||
|
|
||||||
|
If you run `cd /usr/bin`, the "future" directories will be removed, and you won't be able to access them with <kbd>Alt</kbd> + <kbd>Right</kbd>:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
➜ /u/bin typeset -pm dirhistory_\*
|
||||||
|
typeset -ax dirhistory_past=( /home/user /usr )
|
||||||
|
typeset -ax dirhistory_future=( /usr/bin )
|
||||||
|
```
|
||||||
|
|
||||||
|
If you instead run `cde /usr/bin`, the "future" directories will be preserved:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
➜ /u/bin typeset -pm dirhistory_\*
|
||||||
|
typeset -ax dirhistory_past=( /home/user /usr /usr/bin )
|
||||||
|
typeset -ax dirhistory_future=( /usr/share/doc /usr/share )
|
||||||
|
```
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,10 @@ dirhistory_past=($PWD)
|
||||||
dirhistory_future=()
|
dirhistory_future=()
|
||||||
export dirhistory_past
|
export dirhistory_past
|
||||||
export dirhistory_future
|
export dirhistory_future
|
||||||
|
|
||||||
export DIRHISTORY_SIZE=30
|
export DIRHISTORY_SIZE=30
|
||||||
|
|
||||||
|
alias cde='dirhistory_cd'
|
||||||
|
|
||||||
# Pop the last element of dirhistory_past.
|
# Pop the last element of dirhistory_past.
|
||||||
# Pass the name of the variable to return the result in.
|
# Pass the name of the variable to return the result in.
|
||||||
# Returns the element if the array was not empty,
|
# Returns the element if the array was not empty,
|
||||||
|
|
@ -136,7 +137,11 @@ for keymap in emacs vicmd viins; do
|
||||||
|
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app
|
Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app
|
||||||
iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;; # iTerm2
|
ghostty) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # ghostty
|
||||||
|
iTerm.app)
|
||||||
|
bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back
|
||||||
|
bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if (( ${+terminfo[kcub1]} )); then
|
if (( ${+terminfo[kcub1]} )); then
|
||||||
|
|
@ -151,7 +156,11 @@ for keymap in emacs vicmd viins; do
|
||||||
|
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app
|
Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app
|
||||||
iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;; # iTerm2
|
ghostty) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # ghostty
|
||||||
|
iTerm.app)
|
||||||
|
bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future
|
||||||
|
bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if (( ${+terminfo[kcuf1]} )); then
|
if (( ${+terminfo[kcuf1]} )); then
|
||||||
|
|
@ -200,6 +209,7 @@ for keymap in emacs vicmd viins; do
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;; # Terminal.app
|
Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;; # Terminal.app
|
||||||
iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;; # iTerm2
|
iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;; # iTerm2
|
||||||
|
ghostty) bindkey -M $keymap "^[[1;3A" dirhistory_zle_dirhistory_up ;; # ghostty
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if (( ${+terminfo[kcuu1]} )); then
|
if (( ${+terminfo[kcuu1]} )); then
|
||||||
|
|
@ -215,6 +225,7 @@ for keymap in emacs vicmd viins; do
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;; # Terminal.app
|
Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;; # Terminal.app
|
||||||
iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;; # iTerm2
|
iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;; # iTerm2
|
||||||
|
ghostty) bindkey -M $keymap "^[[1;3B" dirhistory_zle_dirhistory_down ;; # ghostty
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if (( ${+terminfo[kcud1]} )); then
|
if (( ${+terminfo[kcud1]} )); then
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ _dnf5_rpm_files() {
|
||||||
|
|
||||||
_dnf5_packages_or_rpms() {
|
_dnf5_packages_or_rpms() {
|
||||||
if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name
|
if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name
|
||||||
_dnf_rpm_files
|
_dnf5_rpm_files
|
||||||
else
|
else
|
||||||
_dnf5_packages "$@"
|
_dnf5_packages "$@"
|
||||||
fi
|
fi
|
||||||
|
|
@ -272,7 +272,7 @@ _dnf5-repoquery() {
|
||||||
for v in enhance obsolete provide recommend require suggest supplement; do
|
for v in enhance obsolete provide recommend require suggest supplement; do
|
||||||
opts+=( "--what${v}s=[limit to packages that $v specified capabilities]:list of capability: ")
|
opts+=( "--what${v}s=[limit to packages that $v specified capabilities]:list of capability: ")
|
||||||
done
|
done
|
||||||
# mutually exclusive formating options
|
# mutually exclusive formatting options
|
||||||
opts+=(
|
opts+=(
|
||||||
+ '(format)'
|
+ '(format)'
|
||||||
'--conflicts[display capabilities that the package conflicts with]'
|
'--conflicts[display capabilities that the package conflicts with]'
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,10 @@ following setting. See https://github.com/ohmyzsh/ohmyzsh/issues/11789 for more
|
||||||
zstyle ':omz:plugins:docker' legacy-completion yes
|
zstyle ':omz:plugins:docker' legacy-completion yes
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### For Podman's Docker wrapper users
|
||||||
|
|
||||||
|
If you use Podman's Docker wrapper, you need to enable legacy completion. See above section.
|
||||||
|
|
||||||
## Aliases
|
## Aliases
|
||||||
|
|
||||||
| Alias | Command | Description |
|
| Alias | Command | Description |
|
||||||
|
|
@ -73,6 +77,7 @@ zstyle ':omz:plugins:docker' legacy-completion yes
|
||||||
| drs | `docker container restart` | Restart one or more containers |
|
| drs | `docker container restart` | Restart one or more containers |
|
||||||
| dsta | `docker stop $(docker ps -q)` | Stop all running containers |
|
| dsta | `docker stop $(docker ps -q)` | Stop all running containers |
|
||||||
| dstp | `docker container stop` | Stop one or more running containers |
|
| dstp | `docker container stop` | Stop one or more running containers |
|
||||||
|
| dsts | `docker stats` | Display real-time streaming statistics for containers |
|
||||||
| dtop | `docker top` | Display the running processes of a container |
|
| dtop | `docker top` | Display the running processes of a container |
|
||||||
| dvi | `docker volume inspect` | Display detailed information about one or more volumes |
|
| dvi | `docker volume inspect` | Display detailed information about one or more volumes |
|
||||||
| dvls | `docker volume ls` | List all the volumes known to docker |
|
| dvls | `docker volume ls` | List all the volumes known to docker |
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ alias dst='docker container start'
|
||||||
alias drs='docker container restart'
|
alias drs='docker container restart'
|
||||||
alias dsta='docker stop $(docker ps -q)'
|
alias dsta='docker stop $(docker ps -q)'
|
||||||
alias dstp='docker container stop'
|
alias dstp='docker container stop'
|
||||||
|
alias dsts='docker stats'
|
||||||
alias dtop='docker top'
|
alias dtop='docker top'
|
||||||
alias dvi='docker volume inspect'
|
alias dvi='docker volume inspect'
|
||||||
alias dvls='docker volume ls'
|
alias dvls='docker volume ls'
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
||||||
|
|
@ -23,3 +23,4 @@ plugins=(... dotnet)
|
||||||
| dp | dotnet pack | Create a NuGet package. |
|
| dp | dotnet pack | Create a NuGet package. |
|
||||||
| dng | dotnet nuget | Provides additional NuGet commands. |
|
| dng | dotnet nuget | Provides additional NuGet commands. |
|
||||||
| db | dotnet build | Build a .NET project |
|
| db | dotnet build | Build a .NET project |
|
||||||
|
| dres | dotnet restore | Restore dependencies and project-specific tools for a project. |
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ _dotnet_completion() {
|
||||||
|
|
||||||
compdef _dotnet_completion dotnet
|
compdef _dotnet_completion dotnet
|
||||||
|
|
||||||
# Aliases bellow are here for backwards compatibility
|
# Aliases below are here for backwards compatibility
|
||||||
# added by Shaun Tabone (https://github.com/xontab)
|
# added by Shaun Tabone (https://github.com/xontab)
|
||||||
|
|
||||||
alias dn='dotnet new'
|
alias dn='dotnet new'
|
||||||
|
|
@ -24,3 +24,4 @@ alias da='dotnet add'
|
||||||
alias dp='dotnet pack'
|
alias dp='dotnet pack'
|
||||||
alias dng='dotnet nuget'
|
alias dng='dotnet nuget'
|
||||||
alias db='dotnet build'
|
alias db='dotnet build'
|
||||||
|
alias dres='dotnet restore'
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ alias eeval="$EMACS_PLUGIN_LAUNCHER --eval"
|
||||||
alias eframe='emacsclient --alternate-editor="" --create-frame'
|
alias eframe='emacsclient --alternate-editor="" --create-frame'
|
||||||
|
|
||||||
# Emacs ANSI Term tracking
|
# Emacs ANSI Term tracking
|
||||||
if [[ -n "$INSIDE_EMACS" ]]; then
|
if [[ -n "$INSIDE_EMACS" ]] && [[ "$INSIDE_EMACS" != "vterm" ]]; then
|
||||||
chpwd_emacs() { print -P "\033AnSiTc %d"; }
|
chpwd_emacs() { print -P "\033AnSiTc %d"; }
|
||||||
print -P "\033AnSiTc %d" # Track current working directory
|
print -P "\033AnSiTc %d" # Track current working directory
|
||||||
print -P "\033AnSiTu %n" # Track username
|
print -P "\033AnSiTu %n" # Track username
|
||||||
|
|
|
||||||
|
|
@ -14,53 +14,56 @@ plugins=(... extract)
|
||||||
|
|
||||||
## Supported file extensions
|
## Supported file extensions
|
||||||
|
|
||||||
| Extension | Description |
|
| Extension | Description |
|
||||||
| :---------------- | :----------------------------------- |
|
| :---------------- | :-------------------------------------- |
|
||||||
| `7z` | 7zip file |
|
| `7z` | 7zip file |
|
||||||
| `Z` | Z archive (LZW) |
|
| `apk` | Android app file |
|
||||||
| `apk` | Android app file |
|
| `aar` | Android library file |
|
||||||
| `aar` | Android library file |
|
| `bz2` | Bzip2 file |
|
||||||
| `bz2` | Bzip2 file |
|
| `cab` | Microsoft cabinet archive |
|
||||||
| `cab` | Microsoft cabinet archive |
|
| `cpio` | Cpio archive |
|
||||||
| `cpio` | Cpio archive |
|
| `deb` | Debian package |
|
||||||
| `deb` | Debian package |
|
| `ear` | Enterprise Application aRchive |
|
||||||
| `ear` | Enterprise Application aRchive |
|
| `exe` | Windows executable file |
|
||||||
| `exe` | Windows executable file |
|
| `gz` | Gzip file |
|
||||||
| `gz` | Gzip file |
|
| `ipa` | iOS app package |
|
||||||
| `ipa` | iOS app package |
|
| `ipsw` | iOS firmware file |
|
||||||
| `ipsw` | iOS firmware file |
|
| `jar` | Java Archive |
|
||||||
| `jar` | Java Archive |
|
| `lrz` | LRZ archive |
|
||||||
| `lrz` | LRZ archive |
|
| `lz4` | LZ4 archive |
|
||||||
| `lz4` | LZ4 archive |
|
| `lzma` | LZMA archive |
|
||||||
| `lzma` | LZMA archive |
|
| `obscpio` | cpio archive used on OBS |
|
||||||
| `obscpio` | cpio archive used on OBS |
|
| `pk3` | Renamed Zip archive used by Quake games |
|
||||||
| `rar` | WinRAR archive |
|
| `pk4` | Renamed Zip archive used by Quake games |
|
||||||
| `rpm` | RPM package |
|
| `pk7` | Renamed 7zip file used by Quake games |
|
||||||
| `sublime-package` | Sublime Text package |
|
| `rar` | WinRAR archive |
|
||||||
| `tar` | Tarball |
|
| `rpm` | RPM package |
|
||||||
| `tar.bz2` | Tarball with bzip2 compression |
|
| `sublime-package` | Sublime Text package |
|
||||||
| `tar.gz` | Tarball with gzip compression |
|
| `tar` | Tarball |
|
||||||
| `tar.lrz` | Tarball with lrzip compression |
|
| `tar.bz2` | Tarball with bzip2 compression |
|
||||||
| `tar.lz` | Tarball with lzip compression |
|
| `tar.gz` | Tarball with gzip compression |
|
||||||
| `tar.lz4` | Tarball with lz4 compression |
|
| `tar.lrz` | Tarball with lrzip compression |
|
||||||
| `tar.xz` | Tarball with lzma2 compression |
|
| `tar.lz` | Tarball with lzip compression |
|
||||||
| `tar.zma` | Tarball with lzma compression |
|
| `tar.lz4` | Tarball with lz4 compression |
|
||||||
| `tar.zst` | Tarball with zstd compression |
|
| `tar.xz` | Tarball with lzma2 compression |
|
||||||
| `tbz` | Tarball with bzip compression |
|
| `tar.zma` | Tarball with lzma compression |
|
||||||
| `tbz2` | Tarball with bzip2 compression |
|
| `tar.zst` | Tarball with zstd compression |
|
||||||
| `tgz` | Tarball with gzip compression |
|
| `tbz` | Tarball with bzip compression |
|
||||||
| `tlz` | Tarball with lzma compression |
|
| `tbz2` | Tarball with bzip2 compression |
|
||||||
| `txz` | Tarball with lzma2 compression |
|
| `tgz` | Tarball with gzip compression |
|
||||||
| `tzst` | Tarball with zstd compression |
|
| `tlz` | Tarball with lzma compression |
|
||||||
| `vsix` | VS Code extension zip file |
|
| `txz` | Tarball with lzma2 compression |
|
||||||
| `war` | Web Application archive (Java-based) |
|
| `tzst` | Tarball with zstd compression |
|
||||||
| `whl` | Python wheel file |
|
| `vsix` | VS Code extension zip file |
|
||||||
| `xpi` | Mozilla XPI module file |
|
| `war` | Web Application archive (Java-based) |
|
||||||
| `xz` | LZMA2 archive |
|
| `whl` | Python wheel file |
|
||||||
| `zip` | Zip archive |
|
| `xpi` | Mozilla XPI module file |
|
||||||
| `zlib` | zlib archive |
|
| `xz` | LZMA2 archive |
|
||||||
| `zst` | Zstandard file (zstd) |
|
| `Z` | Z archive (LZW) |
|
||||||
| `zpaq` | Zpaq file |
|
| `zip` | Zip archive |
|
||||||
|
| `zlib` | zlib archive |
|
||||||
|
| `zst` | Zstandard file (zstd) |
|
||||||
|
| `zpaq` | Zpaq file |
|
||||||
|
|
||||||
See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information
|
See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information
|
||||||
regarding archive formats.
|
regarding archive formats.
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,9 @@ local -a exts=(
|
||||||
lz4
|
lz4
|
||||||
lzma
|
lzma
|
||||||
obscpio
|
obscpio
|
||||||
|
pk3
|
||||||
|
pk4
|
||||||
|
pk7
|
||||||
rar
|
rar
|
||||||
rpm
|
rpm
|
||||||
sublime-package
|
sublime-package
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,19 @@ EOF
|
||||||
(*.lz4) lz4 -d "$full_path" ;;
|
(*.lz4) lz4 -d "$full_path" ;;
|
||||||
(*.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) 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]*) 7za x "$full_path" ;;
|
(*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;
|
||||||
(*.deb)
|
(*.deb)
|
||||||
command mkdir -p "control" "data"
|
command mkdir -p "control" "data"
|
||||||
ar vx "$full_path" > /dev/null
|
ar vx "$full_path" > /dev/null
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# Fig plugin
|
|
||||||
|
|
||||||
This plugin sets up completion for [Fig](https://fig.io/).
|
|
||||||
|
|
||||||
To use it, add `fig` to the plugins array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... fig)
|
|
||||||
```
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
if ! (( $+commands[fig] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If the completion file doesn't exist yet, we need to autoload it and
|
|
||||||
# bind it to `fig`. Otherwise, compinit will have already done that
|
|
||||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_fig" ]]; then
|
|
||||||
autoload -Uz _fig
|
|
||||||
typeset -g -A _comps
|
|
||||||
_comps[fig]=_fig
|
|
||||||
fi
|
|
||||||
|
|
||||||
fig completion zsh >| "$ZSH_CACHE_DIR/completions/_fig" &|
|
|
||||||
|
|
@ -26,4 +26,4 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_flutter" ]]; then
|
||||||
_comps[flutter]=_flutter
|
_comps[flutter]=_flutter
|
||||||
fi
|
fi
|
||||||
|
|
||||||
flutter zsh-completion >| "$ZSH_CACHE_DIR/completions/_flutter" &|
|
flutter zsh-completion < /dev/null >| "$ZSH_CACHE_DIR/completions/_flutter" &|
|
||||||
|
|
@ -23,9 +23,10 @@ def get_tagname_or_hash():
|
||||||
return hash_
|
return hash_
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stashs count
|
# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stash count
|
||||||
|
# Use `--git-common-dir` to avoid problems with git worktrees, which don't have individual stashes
|
||||||
def get_stash():
|
def get_stash():
|
||||||
cmd = Popen(['git', 'rev-parse', '--git-dir'], stdout=PIPE, stderr=PIPE)
|
cmd = Popen(['git', 'rev-parse', '--git-common-dir'], stdout=PIPE, stderr=PIPE)
|
||||||
so, se = cmd.communicate()
|
so, se = cmd.communicate()
|
||||||
stash_file = '%s%s' % (so.decode('utf-8').rstrip(), '/logs/refs/stash')
|
stash_file = '%s%s' % (so.decode('utf-8').rstrip(), '/logs/refs/stash')
|
||||||
|
|
||||||
|
|
@ -35,7 +36,6 @@ def get_stash():
|
||||||
except IOError:
|
except IOError:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
# `git status --porcelain --branch` can collect all information
|
# `git status --porcelain --branch` can collect all information
|
||||||
# branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind
|
# branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind
|
||||||
po = Popen(['git', 'status', '--porcelain', '--branch'], env=dict(os.environ, LANG="C"), stdout=PIPE, stderr=PIPE)
|
po = Popen(['git', 'status', '--porcelain', '--branch'], env=dict(os.environ, LANG="C"), stdout=PIPE, stderr=PIPE)
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@ plugins=(... git)
|
||||||
| `gcss` | `git commit -S -s` |
|
| `gcss` | `git commit -S -s` |
|
||||||
| `gcssm` | `git commit -S -s -m` |
|
| `gcssm` | `git commit -S -s -m` |
|
||||||
| `gcf` | `git config --list` |
|
| `gcf` | `git config --list` |
|
||||||
|
| `gcfu` | `git commit --fixup` |
|
||||||
| `gdct` | `git describe --tags $(git rev-list --tags --max-count=1)` |
|
| `gdct` | `git describe --tags $(git rev-list --tags --max-count=1)` |
|
||||||
| `gd` | `git diff` |
|
| `gd` | `git diff` |
|
||||||
| `gdca` | `git diff --cached` |
|
| `gdca` | `git diff --cached` |
|
||||||
|
|
@ -90,7 +91,7 @@ plugins=(... git)
|
||||||
| `gdnolock` | `git diff $@ ":(exclude)package-lock.json" ":(exclude)\*.lock"` |
|
| `gdnolock` | `git diff $@ ":(exclude)package-lock.json" ":(exclude)\*.lock"` |
|
||||||
| `gdt` | `git diff-tree --no-commit-id --name-only -r` |
|
| `gdt` | `git diff-tree --no-commit-id --name-only -r` |
|
||||||
| `gf` | `git fetch` |
|
| `gf` | `git fetch` |
|
||||||
| `gfa` | `git fetch --all --tags --prune` |
|
| `gfa` | `git fetch --all --tags --prune` |
|
||||||
| `gfo` | `git fetch origin` |
|
| `gfo` | `git fetch origin` |
|
||||||
| `gg` | `git gui citool` |
|
| `gg` | `git gui citool` |
|
||||||
| `gga` | `git gui citool --amend` |
|
| `gga` | `git gui citool --amend` |
|
||||||
|
|
@ -212,7 +213,7 @@ plugins=(... git)
|
||||||
| `gtv` | `git tag \| sort -V` |
|
| `gtv` | `git tag \| sort -V` |
|
||||||
| `gignore` | `git update-index --assume-unchanged` |
|
| `gignore` | `git update-index --assume-unchanged` |
|
||||||
| `gunignore` | `git update-index --no-assume-unchanged` |
|
| `gunignore` | `git update-index --no-assume-unchanged` |
|
||||||
| `gwch` | `git whatchanged -p --abbrev-commit --pretty=medium` |
|
| `gwch` | `git log --patch --abbrev-commit --pretty=medium --raw` |
|
||||||
| `gwt` | `git worktree` |
|
| `gwt` | `git worktree` |
|
||||||
| `gwtls` | `git worktree list` |
|
| `gwtls` | `git worktree list` |
|
||||||
| `gwtmv` | `git worktree move` |
|
| `gwtmv` | `git worktree move` |
|
||||||
|
|
@ -233,40 +234,26 @@ branch exists. We do this via the function `git_main_branch`.
|
||||||
These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not,
|
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)
|
||||||
|
|
||||||
|
|
@ -286,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
|
||||||
|
|
@ -31,16 +23,26 @@ function git_develop_branch() {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if main exists and use instead of master
|
# Get the default branch name from common branch names or fallback to remote HEAD
|
||||||
function git_main_branch() {
|
function git_main_branch() {
|
||||||
command git rev-parse --git-dir &>/dev/null || return
|
command git rev-parse --git-dir &>/dev/null || return
|
||||||
local ref
|
|
||||||
|
local remote ref
|
||||||
|
|
||||||
for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,stable,master}; do
|
for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,stable,master}; do
|
||||||
if command git show-ref -q --verify $ref; then
|
if command git show-ref -q --verify $ref; then
|
||||||
echo ${ref:t}
|
echo ${ref:t}
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Fallback: try to get the default branch from remote HEAD symbolic refs
|
||||||
|
for remote in origin upstream; do
|
||||||
|
ref=$(command git rev-parse --abbrev-ref $remote/HEAD 2>/dev/null)
|
||||||
|
if [[ $ref == $remote/* ]]; then
|
||||||
|
echo ${ref#"$remote/"}; return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# If no main branch was found, fall back to master but return error
|
# If no main branch was found, fall back to master but return error
|
||||||
echo master
|
echo master
|
||||||
|
|
@ -86,13 +88,13 @@ function work_in_progress() {
|
||||||
# Aliases
|
# Aliases
|
||||||
# (sorted alphabetically by command)
|
# (sorted alphabetically by command)
|
||||||
# (order should follow README)
|
# (order should follow README)
|
||||||
# (in some cases force the alisas order to match README, like for example gke and gk)
|
# (in some cases force the alias order to match README, like for example gke and gk)
|
||||||
#
|
#
|
||||||
|
|
||||||
alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
|
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 "${*}"
|
||||||
|
|
@ -200,6 +202,7 @@ alias gc!='git commit --verbose --amend'
|
||||||
alias gcn='git commit --verbose --no-edit'
|
alias gcn='git commit --verbose --no-edit'
|
||||||
alias gcn!='git commit --verbose --no-edit --amend'
|
alias gcn!='git commit --verbose --no-edit --amend'
|
||||||
alias gcf='git config --list'
|
alias gcf='git config --list'
|
||||||
|
alias gcfu='git commit --fixup'
|
||||||
alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
|
alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
|
||||||
alias gd='git diff'
|
alias gd='git diff'
|
||||||
alias gdca='git diff --cached'
|
alias gdca='git diff --cached'
|
||||||
|
|
@ -269,10 +272,11 @@ alias gpra='git pull --rebase --autostash'
|
||||||
alias gprav='git pull --rebase --autostash -v'
|
alias gprav='git pull --rebase --autostash -v'
|
||||||
|
|
||||||
function ggu() {
|
function ggu() {
|
||||||
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
|
local b
|
||||||
git pull --rebase origin "${b:=$1}"
|
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||||
|
git pull --rebase origin "${b:-$1}"
|
||||||
}
|
}
|
||||||
compdef _git ggu=git-checkout
|
compdef _git ggu=git-pull
|
||||||
|
|
||||||
alias gprom='git pull --rebase origin $(git_main_branch)'
|
alias gprom='git pull --rebase origin $(git_main_branch)'
|
||||||
alias gpromi='git pull --rebase=interactive origin $(git_main_branch)'
|
alias gpromi='git pull --rebase=interactive origin $(git_main_branch)'
|
||||||
|
|
@ -281,14 +285,15 @@ alias gprumi='git pull --rebase=interactive upstream $(git_main_branch)'
|
||||||
alias ggpull='git pull origin "$(git_current_branch)"'
|
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
|
||||||
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
|
local b
|
||||||
git pull origin "${b:=$1}"
|
[[ $# == 0 ]] && b="$(git_current_branch)"
|
||||||
|
git pull origin "${b:-$1}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
compdef _git ggl=git-checkout
|
compdef _git ggl=git-pull
|
||||||
|
|
||||||
alias gluc='git pull upstream $(git_current_branch)'
|
alias gluc='git pull upstream $(git_current_branch)'
|
||||||
alias glum='git pull upstream $(git_main_branch)'
|
alias glum='git pull upstream $(git_main_branch)'
|
||||||
|
|
@ -296,10 +301,11 @@ alias gp='git push'
|
||||||
alias gpd='git push --dry-run'
|
alias gpd='git push --dry-run'
|
||||||
|
|
||||||
function ggf() {
|
function ggf() {
|
||||||
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
|
local b
|
||||||
git push --force origin "${b:=$1}"
|
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||||
|
git push --force origin "${b:-$1}"
|
||||||
}
|
}
|
||||||
compdef _git ggf=git-checkout
|
compdef _git ggf=git-push
|
||||||
|
|
||||||
alias gpf!='git push --force'
|
alias gpf!='git push --force'
|
||||||
is-at-least 2.30 "$git_version" \
|
is-at-least 2.30 "$git_version" \
|
||||||
|
|
@ -307,10 +313,11 @@ is-at-least 2.30 "$git_version" \
|
||||||
|| alias gpf='git push --force-with-lease'
|
|| alias gpf='git push --force-with-lease'
|
||||||
|
|
||||||
function ggfl() {
|
function ggfl() {
|
||||||
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
|
local b
|
||||||
git push --force-with-lease origin "${b:=$1}"
|
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||||
|
git push --force-with-lease origin "${b:-$1}"
|
||||||
}
|
}
|
||||||
compdef _git ggfl=git-checkout
|
compdef _git ggfl=git-push
|
||||||
|
|
||||||
alias gpsup='git push --set-upstream origin $(git_current_branch)'
|
alias gpsup='git push --set-upstream origin $(git_current_branch)'
|
||||||
is-at-least 2.30 "$git_version" \
|
is-at-least 2.30 "$git_version" \
|
||||||
|
|
@ -322,14 +329,15 @@ alias gpod='git push origin --delete'
|
||||||
alias ggpush='git push origin "$(git_current_branch)"'
|
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
|
||||||
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
|
local b
|
||||||
git push origin "${b:=$1}"
|
[[ $# == 0 ]] && b="$(git_current_branch)"
|
||||||
|
git push origin "${b:-$1}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
compdef _git ggp=git-checkout
|
compdef _git ggp=git-push
|
||||||
|
|
||||||
alias gpu='git push upstream'
|
alias gpu='git push upstream'
|
||||||
alias grb='git rebase'
|
alias grb='git rebase'
|
||||||
|
|
@ -398,7 +406,7 @@ alias gts='git tag --sign'
|
||||||
alias gtv='git tag | sort -V'
|
alias gtv='git tag | sort -V'
|
||||||
alias gignore='git update-index --assume-unchanged'
|
alias gignore='git update-index --assume-unchanged'
|
||||||
alias gunignore='git update-index --no-assume-unchanged'
|
alias gunignore='git update-index --no-assume-unchanged'
|
||||||
alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
|
alias gwch='git log --patch --abbrev-commit --pretty=medium --raw'
|
||||||
alias gwt='git worktree'
|
alias gwt='git worktree'
|
||||||
alias gwta='git worktree add'
|
alias gwta='git worktree add'
|
||||||
alias gwtls='git worktree list'
|
alias gwtls='git worktree list'
|
||||||
|
|
@ -411,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
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
# gpg-agent
|
# gpg-agent
|
||||||
|
|
||||||
Enables [GPG's gpg-agent](https://www.gnupg.org/documentation/manuals/gnupg/) if it is not running.
|
Applies some fixes for some common issues encountered with [GPG's gpg-agent](https://www.gnupg.org/documentation/manuals/gnupg/).
|
||||||
|
|
||||||
|
More specifically, this plugin:
|
||||||
|
|
||||||
|
- Updates the `GPG_TTY` environment variable before each shell execution.
|
||||||
|
- Updates the `SSH_AUTH_SOCK` environment variable if `enable-ssh-support` is turned on.
|
||||||
|
|
||||||
To use it, add `gpg-agent` to the plugins array of your zshrc file:
|
To use it, add `gpg-agent` to the plugins array of your zshrc file:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,18 +19,18 @@ __gradle-init-cache-dir() {
|
||||||
}
|
}
|
||||||
|
|
||||||
__gradle-set-settings-file() {
|
__gradle-set-settings-file() {
|
||||||
# In order of precedence: --settings-file=filename, settings.gradle, settings.gradle.kts
|
# In order of precedence: settings.gradle, settings.gradle.kts
|
||||||
|
|
||||||
local default_gradle_settings_file="$project_root_dir/settings.gradle"
|
local default_gradle_settings_file="$project_root_dir/settings.gradle"
|
||||||
if [[ ! -f $default_gradle_settings_file ]]; then
|
if [[ ! -f $default_gradle_settings_file ]]; then
|
||||||
default_gradle_settings_file="$project_root_dir/settings.gradle.kts"
|
default_gradle_settings_file="$project_root_dir/settings.gradle.kts"
|
||||||
fi
|
fi
|
||||||
gradle_settings_file=${${(v)opt_args[(i)-c|--settings-file]}:-$default_gradle_settings_file}
|
gradle_settings_file=$default_gradle_settings_file
|
||||||
}
|
}
|
||||||
|
|
||||||
__gradle-set-build-file() {
|
__gradle-set-build-file() {
|
||||||
__gradle-set-settings-file
|
__gradle-set-settings-file
|
||||||
# In order of precedence: --build-file=filename, rootProject.buildFileName, build.gradle, build.gradle.kts
|
# In order of precedence: rootProject.buildFileName, build.gradle, build.gradle.kts
|
||||||
|
|
||||||
local default_gradle_build_file_name="build.gradle"
|
local default_gradle_build_file_name="build.gradle"
|
||||||
if [[ -r $gradle_settings_file ]]; then
|
if [[ -r $gradle_settings_file ]]; then
|
||||||
|
|
@ -45,8 +45,7 @@ __gradle-set-build-file() {
|
||||||
default_gradle_build_file="$project_root_dir/build.gradle.kts"
|
default_gradle_build_file="$project_root_dir/build.gradle.kts"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If a build file is specified after '-b' or '--build-file', use this file.
|
gradle_build_file=$default_gradle_build_file
|
||||||
gradle_build_file=${${(v)opt_args[(i)-b|--build-file]}:-$default_gradle_build_file}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__gradle-set-cache-name() {
|
__gradle-set-cache-name() {
|
||||||
|
|
@ -94,10 +93,11 @@ __gradle-generate-tasks-cache() {
|
||||||
# Reuse Gradle Daemon if IDLE but don't start a new one.
|
# Reuse Gradle Daemon if IDLE but don't start a new one.
|
||||||
local gradle_tasks_output
|
local gradle_tasks_output
|
||||||
if [[ ! -z "$($gradle_cmd --status 2>/dev/null | grep IDLE)" ]]; then
|
if [[ ! -z "$($gradle_cmd --status 2>/dev/null | grep IDLE)" ]]; then
|
||||||
gradle_tasks_output="$($gradle_cmd --daemon --no-scan --build-file $gradle_build_file --console=plain -q tasks --all 2>/dev/null)"
|
gradle_tasks_output="$(cd "$project_root_dir" && "$gradle_cmd" --daemon --no-scan --console=plain -q tasks --all 2>/dev/null)"
|
||||||
else
|
else
|
||||||
gradle_tasks_output="$($gradle_cmd --no-daemon --no-scan --build-file $gradle_build_file --console=plain -q tasks --all 2>/dev/null)"
|
gradle_tasks_output="$(cd "$project_root_dir" && "$gradle_cmd" --no-daemon --no-scan --console=plain -q tasks --all 2>/dev/null)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local gradle_all_tasks="" root_tasks="" subproject_tasks="" output_line
|
local gradle_all_tasks="" root_tasks="" subproject_tasks="" output_line
|
||||||
local -a match
|
local -a match
|
||||||
for output_line in ${(f)"$(printf "%s\n" "${gradle_tasks_output[@]}")"}; do
|
for output_line in ${(f)"$(printf "%s\n" "${gradle_tasks_output[@]}")"}; do
|
||||||
|
|
@ -199,106 +199,158 @@ __gradle_subcommand() {
|
||||||
;;
|
;;
|
||||||
(dependencyInsight)
|
(dependencyInsight)
|
||||||
_arguments \
|
_arguments \
|
||||||
|
'--all-variants[Show all variants of each dependency]' \
|
||||||
|
'--configuration=[Looks for the dependency in given configuration.]:dependency configuration:_gradle_dependency_configurations' \
|
||||||
'--dependency=[Shows the details of given dependency.]' \
|
'--dependency=[Shows the details of given dependency.]' \
|
||||||
'--configuration=[Looks for the dependency in given configuration.]:dependency configuration:_gradle_dependency_configurations' && ret=0
|
'--single-path[Show at most one path to each dependency]' && ret=0
|
||||||
;;
|
;;
|
||||||
(help)
|
(help)
|
||||||
_arguments \
|
_arguments \
|
||||||
'--task[The task to show help for.]' && ret=0
|
'--task=[The task to show help for.]' && ret=0
|
||||||
;;
|
;;
|
||||||
(init)
|
(init)
|
||||||
_arguments \
|
_arguments \
|
||||||
'--dsl=[DSL to be used in generated scripts.]:dsl:(groovy kotlin)' \
|
'--comments[Include clarifying comments in files.]' \
|
||||||
'--package=[Package for the generated source.]' \
|
'--dsl=[Set the build script DSL to be used in generated scripts.]' \
|
||||||
'--project-name=[Name of the generated project.]' \
|
'--incubating[Allow the generated build to use new features and APIs.]' \
|
||||||
'--test-framework=[Test framework to be used.]:test framework:(junit kotlintest scalatest spock testng)' \
|
'--insecure-protocol=[How to handle insecure URLs used for Maven Repositories.]' \
|
||||||
'--type=[Project type to generate.]:project type:(basic cpp-application cpp-library groovy-application groovy-library java-application java-library kotlin-application kotlin-library pom scala-library)' && ret=0
|
'--java-version=[Provides java version to use in the project.]' \
|
||||||
|
'--overwrite[Allow existing files in the build directory to be overwritten?]' \
|
||||||
|
'--package=[Set the package for source files.]' \
|
||||||
|
'--project-name=[Set the project name.]' \
|
||||||
|
'--split-project[Split functionality across multiple subprojects?]' \
|
||||||
|
'--test-framework=[Set the test framework to be used.]' \
|
||||||
|
'--type=[Set the type of project to generate.]' \
|
||||||
|
'--use-defaults[Use default values for options not configured explicitly]' && ret=0
|
||||||
;;
|
;;
|
||||||
(tasks)
|
(tasks)
|
||||||
_arguments \
|
_arguments \
|
||||||
'--all[List all tasks, including subproject tasks.]' \
|
'--all[Show additional tasks and detail.]' \
|
||||||
'--group=[Show tasks only from given task group.]' && ret=0
|
'--group=[Show tasks for a specific group.]' \
|
||||||
|
'--groups=[Show tasks for specific groups (can be used multiple times to specify multiple groups).]' \
|
||||||
|
'--types[Show task class types]' && ret=0
|
||||||
;;
|
;;
|
||||||
(test)
|
(test)
|
||||||
_arguments -C \
|
_arguments -C \
|
||||||
'--debug-jvm[Enable debugging for the test process. The process is started suspended and listening on port 5005. Requires the "java" plugin.]' \
|
'--debug-jvm[Enable debugging for the test process. The process is started suspended and listening on port 5005.]' \
|
||||||
'--fail-fast[Stops test execution after the first failed test. Requires the "java" plugin.]' \
|
'--fail-fast[Stops test execution after the first failed test.]' \
|
||||||
'--tests=[Sets test class or method name to be included, * is supported. Requires the "java" plugin.]' \
|
'--test-dry-run[Simulate test execution.]' \
|
||||||
|
'--tests=[Sets test class or method name to be included (in addition to the test task filters), '*' is supported.]' \
|
||||||
'(-)*:: :->task-or-option' && ret=0
|
'(-)*:: :->task-or-option' && ret=0
|
||||||
;;
|
;;
|
||||||
(wrapper)
|
(wrapper)
|
||||||
_arguments \
|
_arguments \
|
||||||
'--distribution-type=[Binary-only or all with docs and sources]:*:distribution type:(bin all)' \
|
'--distribution-type=[The type of the Gradle distribution to be used by the wrapper.]:*:distribution type:(bin all)' \
|
||||||
'--gradle-version=[Set Gradle version for wrapper]' \
|
'--gradle-distribution-sha256-sum=[The SHA-256 hash sum of the gradle distribution.]' \
|
||||||
'--gradle-distribution-sha256-sum=[SHA-256 checksum]' \
|
'--gradle-distribution-url=[The URL to download the Gradle distribution from.]' \
|
||||||
'--gradle-distribution-url=[Set Gradle distribution URL]' && ret=0
|
'--gradle-version=[The version of the Gradle distribution required by the wrapper. The following labels are allowed: latest, release-candidate, release-milestone, release-nightly, and nightly.]' \
|
||||||
|
'--network-timeout=[Timeout in ms to use when the wrapper is performing network operations.]' \
|
||||||
|
'--validate-url[Sets task to validate the configured distribution url.]' && ret=0
|
||||||
;;
|
;;
|
||||||
(*)
|
(*)
|
||||||
_arguments -C \
|
_arguments -C \
|
||||||
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
'-Dgradle.user.home=[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle.user.home:_directories' \
|
||||||
'(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \
|
'-Dorg.gradle.caching.debug=[]' \
|
||||||
{-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \
|
'-Dorg.gradle.caching=[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]:org.gradle.caching:(true false)' \
|
||||||
{-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \
|
'-Dorg.gradle.configuration-cache.entries-per-key=[]' \
|
||||||
{-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle' \
|
'-Dorg.gradle.configuration-cache.fine-grained-property-tracking=[]' \
|
||||||
'(--configuration-cache)--no-configuration-cache[Disables the configuration cache. Gradle will not reuse the build configuration from previous builds.]' \
|
'-Dorg.gradle.configuration-cache.heap-dump-dir=[]:org.gradle.configuration cache.heap dump dir:_directories' \
|
||||||
'--configuration-cache-problems=[Configures how the configuration cache handles problems]:problem handling:(fail warn)' \
|
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.file-system-checks=[]' \
|
||||||
'(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \
|
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.in-serialization=[]' \
|
||||||
'(--no-configuration-cache)--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
'-Dorg.gradle.configuration-cache.integrity-check=[]' \
|
||||||
'--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
'-Dorg.gradle.configuration-cache.max-problems=[]' \
|
||||||
'--continue[Continues task execution after a task failure.]' \
|
'-Dorg.gradle.configuration-cache.parallel=[]' \
|
||||||
'-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \
|
'-Dorg.gradle.configuration-cache.problems=[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:org.gradle.configuration cache.problems:(fail warn)' \
|
||||||
'-Dorg.gradle.caching=[Set true to enable Gradle build cache.]:enable build cache:(true false)' \
|
'-Dorg.gradle.configuration-cache.read-only=[]' \
|
||||||
'-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
'-Dorg.gradle.configuration-cache.unsafe.ignore.unsupported-build-events-listeners=[]' \
|
||||||
'-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]:enable daemon debug:(true false)' \
|
'-Dorg.gradle.configuration-cache=[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||||
'-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \
|
'-Dorg.gradle.configureondemand=[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds.]' \
|
||||||
'-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \
|
'-Dorg.gradle.console=[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:org.gradle.console:(plain auto rich verbose)' \
|
||||||
'-Dorg.gradle.jvmargs=[Set JVM arguments.]' \
|
'-Dorg.gradle.continue=[Continue task execution after a task failure.]' \
|
||||||
'-Dorg.gradle.java.home=[Set JDK home dir.]' \
|
'-Dorg.gradle.continuous.quietperiod=[]' \
|
||||||
'-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \
|
'-Dorg.gradle.daemon.healthcheckinterval=[]' \
|
||||||
'-Dorg.gradle.parallel=[Set true to enable parallel project builds.]:enable parallel build:(true false)' \
|
'-Dorg.gradle.daemon.idletimeout=[]' \
|
||||||
'-Dorg.gradle.priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
'-Dorg.gradle.daemon.registry.base=[]:org.gradle.daemon.registry.base:_directories' \
|
||||||
'-Dorg.gradle.unsafe.watch-fs=[Set true to enable Gradle file watcher.]:enable watcher:(true false)' \
|
'-Dorg.gradle.daemon=[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||||
'-Dorg.gradle.warning.mode=[Set types of warnings to log.]:warning level:(all summary none)' \
|
'-Dorg.gradle.debug.host=[]' \
|
||||||
'-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \
|
'-Dorg.gradle.debug.port=[]' \
|
||||||
'(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
'-Dorg.gradle.debug.server=[]' \
|
||||||
'(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
'-Dorg.gradle.debug.suspend=[]' \
|
||||||
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
'-Dorg.gradle.debug=[]:org.gradle.debug:(true false)' \
|
||||||
{-g,--gradle-user-home}'[Specifies the gradle user home directory.]:file:_directories' \
|
'-Dorg.gradle.dependency.verification=[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:org.gradle.dependency.verification:(strict lenient off)' \
|
||||||
\*--include-build'[Includes the specified build in the composite.]:file:_directories' \
|
'-Dorg.gradle.java.home=[]:org.gradle.java.home:_directories' \
|
||||||
\*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle' \
|
'-Dorg.gradle.java.installations.auto-detect=[]' \
|
||||||
'(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \
|
'-Dorg.gradle.java.installations.auto-download=[]' \
|
||||||
'--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers' \
|
'-Dorg.gradle.java.installations.fromEnv=[]' \
|
||||||
{-m,--dry-run}'[Runs the builds with all task actions disabled.]' \
|
'-Dorg.gradle.java.installations.idea-jdks-directory=[]:org.gradle.java.installations.idea jdks directory:_directories' \
|
||||||
'--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \
|
'-Dorg.gradle.java.installations.paths=[]:org.gradle.java.installations.paths:_directories' \
|
||||||
'(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \
|
'-Dorg.gradle.jvmargs=[]' \
|
||||||
'(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \
|
'-Dorg.gradle.logging.level=[]:org.gradle.logging.level:(quiet warn info debug)' \
|
||||||
'(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \
|
'-Dorg.gradle.logging.stacktrace=[]' \
|
||||||
'(--parallel)--no-parallel[Disables parallel execution to build projects.]' \
|
'-Dorg.gradle.native=[]' \
|
||||||
'(--scan)--no-scan[Do not create a build scan.]' \
|
'-Dorg.gradle.parallel=[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]:org.gradle.parallel:(true false)' \
|
||||||
'--offline[The build should operate without accessing network resources.]' \
|
'-Dorg.gradle.priority=[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:org.gradle.priority:(normal low)' \
|
||||||
\*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):' \
|
'-Dorg.gradle.problems.report=[(Experimental) enables HTML problems report]' \
|
||||||
{-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories' \
|
'-Dorg.gradle.projectcachedir=[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:org.gradle.projectcachedir:_directories' \
|
||||||
'(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
'-Dorg.gradle.unsafe.isolated-projects=[]' \
|
||||||
'--profile[Profiles build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
'-Dorg.gradle.vfs.verbose=[]' \
|
||||||
'--priority[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
'-Dorg.gradle.vfs.watch=[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]:org.gradle.vfs.watch:(true false)' \
|
||||||
'--project-cache-dir[Specifies the project-specific cache directory.]:cache directory:_directories' \
|
'-Dorg.gradle.warning.mode=[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']' \
|
||||||
'(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \
|
'-Dorg.gradle.welcome=[]:org.gradle.welcome:(once never)' \
|
||||||
'--recompile-scripts[Force build script recompiling.]' \
|
'-Dorg.gradle.workers.max=[Configure the number of concurrent workers Gradle is allowed to use.]' \
|
||||||
'--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \
|
(--no-build-cache)'--build-cache[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]' \
|
||||||
'--refresh-dependencies[Refresh the state of dependencies.]' \
|
(--no-configuration-cache)'--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||||
'--rerun-tasks[Ignore previously cached task results.]' \
|
'--configuration-cache-problems[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:configuration cache problems:(fail warn)' \
|
||||||
'(--no-scan)--scan[Create a build scan.]' \
|
(--no-configure-on-demand)'--configure-on-demand[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds. (incubating)]' \
|
||||||
'(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
'--console[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:console:(plain auto rich verbose)' \
|
||||||
'(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
(--no-continue)'--continue[Continue task execution after a task failure.]' \
|
||||||
'--system-prop[system property (prop=val)]' \
|
|
||||||
{-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \
|
{-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \
|
||||||
{-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \
|
(--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||||
'(--write-locks)--update-locks[Perform a partial update of the dependency lock.]' \
|
(--quiet,-q,--warn,-w,--info,-i){-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
||||||
'(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \
|
{-F,--dependency-verification}'[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:dependency verification:(strict lenient off)' \
|
||||||
'--warning-mode=[Set types of warnings to log.]:warning mode:(all summary none)' \
|
{-m,--dry-run}'[Run the builds with all task actions disabled.]' \
|
||||||
'(--no-watch-fs)--watch-fs[Gradle watches filesystem for incremental builds.]' \
|
\*{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \
|
||||||
'(--update-locks)--write-locks[Persists dependency resolution for locked configurations.]' \
|
'--export-keys[Exports the public keys used for dependency verification.]' \
|
||||||
{-x,--exclude-task}'[Specify a task to be excluded from execution.]' && ret=0
|
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
||||||
|
(--stacktrace,-s){-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
||||||
|
{-g,--gradle-user-home}'[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle user home:_directories' \
|
||||||
|
\*'--include-build[Include the specified build in the composite.]:include build:_directories' \
|
||||||
|
(--quiet,-q,--warn,-w,--debug,-d){-i,--info}'[Set log level to info.]' \
|
||||||
|
\*{-I,--init-script}'[Specify an initialization script.]:init script:_files -g \*.gradle(|.kts)' \
|
||||||
|
'--max-workers[Configure the number of concurrent workers Gradle is allowed to use.]' \
|
||||||
|
(--build-cache)'--no-build-cache[Disables the Gradle build cache.]' \
|
||||||
|
(--configuration-cache)'--no-configuration-cache[Disables the configuration cache.]' \
|
||||||
|
(--configure-on-demand)'--no-configure-on-demand[Disables the use of configuration on demand. (incubating)]' \
|
||||||
|
(--continue)'--no-continue[Stop task execution after a task failure.]' \
|
||||||
|
(--daemon)'--no-daemon[Do not use the Gradle daemon to run the build. Useful occasionally if you have configured Gradle to always run with the daemon by default.]' \
|
||||||
|
(--parallel)'--no-parallel[Disables parallel execution to build projects.]' \
|
||||||
|
(--problems-report)'--no-problems-report[(Experimental) disables HTML problems report]' \
|
||||||
|
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
||||||
|
(--scan)'--no-scan[Disables the creation of a Build Scan.]' \
|
||||||
|
(--watch-fs)'--no-watch-fs[Disables watching the file system.]' \
|
||||||
|
'--offline[Execute the build without accessing network resources.]' \
|
||||||
|
(--no-parallel)'--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
||||||
|
'--priority[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']' \
|
||||||
|
(--no-problems-report)'--problems-report[(Experimental) enables HTML problems report]' \
|
||||||
|
'--profile[Profile build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
||||||
|
'--project-cache-dir[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:project cache dir:_directories' \
|
||||||
|
{-p,--project-dir}'[Specifies the start directory for Gradle. Defaults to current directory.]:project dir:_directories' \
|
||||||
|
'--property-upgrade-report[(Experimental) Runs build with experimental property upgrade report.]' \
|
||||||
|
(--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \
|
||||||
|
{-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \
|
||||||
|
'--refresh-keys[Refresh the public keys used for dependency verification.]' \
|
||||||
|
'--rerun[Causes the task to be re-run even if up-to-date.]' \
|
||||||
|
'--rerun-tasks[Ignore previously cached task results.]' \
|
||||||
|
(--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \
|
||||||
|
{-V,--show-version}'[Print version info and continue.]' \
|
||||||
|
(--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
||||||
|
'--task-graph[(Experimental) Print task graph instead of executing tasks.]' \
|
||||||
|
\*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \
|
||||||
|
(--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \
|
||||||
|
'--warning-mode[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:warning mode:(all summary none)' \
|
||||||
|
(--no-watch-fs)'--watch-fs[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]' \
|
||||||
|
'--write-locks[Persists dependency resolution for locked configurations, ignoring existing locking information if it exists]' \
|
||||||
|
{-M,--write-verification-metadata}'[Generates checksums for dependencies used in the project (comma-separated list)]' && ret=0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
@ -324,76 +376,113 @@ _gradle() {
|
||||||
typeset -A opt_args
|
typeset -A opt_args
|
||||||
|
|
||||||
_arguments -C \
|
_arguments -C \
|
||||||
'(-)'{-\?,-h,--help}'[Shows a help message.]' \
|
'-Dgradle.user.home=[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle.user.home:_directories:->argument-expected' \
|
||||||
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
'-Dorg.gradle.caching.debug=[]:->argument-expected' \
|
||||||
'(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \
|
'-Dorg.gradle.caching=[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]:org.gradle.caching:(true false):->argument-expected' \
|
||||||
{-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \
|
'-Dorg.gradle.configuration-cache.entries-per-key=[]:->argument-expected' \
|
||||||
{-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \
|
'-Dorg.gradle.configuration-cache.fine-grained-property-tracking=[]:->argument-expected' \
|
||||||
{-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle:->argument-expected' \
|
'-Dorg.gradle.configuration-cache.heap-dump-dir=[]:org.gradle.configuration cache.heap dump dir:_directories:->argument-expected' \
|
||||||
'(--no-configuration-cache)--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.file-system-checks=[]:->argument-expected' \
|
||||||
'(--configuration-cache)--no-configuration-cache[Disables the configuration cache. Gradle will not reuse the build configuration from previous builds.]' \
|
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.in-serialization=[]:->argument-expected' \
|
||||||
'--configuration-cache-problems=[Configures how the configuration cache handles problems]:problem handling:(fail warn)' \
|
'-Dorg.gradle.configuration-cache.integrity-check=[]:->argument-expected' \
|
||||||
'(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \
|
'-Dorg.gradle.configuration-cache.max-problems=[]:->argument-expected' \
|
||||||
'--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
'-Dorg.gradle.configuration-cache.parallel=[]:->argument-expected' \
|
||||||
'--continue[Continues task execution after a task failure.]' \
|
'-Dorg.gradle.configuration-cache.problems=[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:org.gradle.configuration cache.problems:(fail warn):->argument-expected' \
|
||||||
'-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \
|
'-Dorg.gradle.configuration-cache.read-only=[]:->argument-expected' \
|
||||||
'-Dorg.gradle.caching=[Set true to enable Gradle build cache.]' \
|
'-Dorg.gradle.configuration-cache.unsafe.ignore.unsupported-build-events-listeners=[]:->argument-expected' \
|
||||||
'-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
'-Dorg.gradle.configuration-cache=[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]:->argument-expected' \
|
||||||
'-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]' \
|
'-Dorg.gradle.configureondemand=[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds.]:->argument-expected' \
|
||||||
'-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \
|
'-Dorg.gradle.console=[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:org.gradle.console:(plain auto rich verbose):->argument-expected' \
|
||||||
'-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \
|
'-Dorg.gradle.continue=[Continue task execution after a task failure.]:->argument-expected' \
|
||||||
'-Dorg.gradle.jvmargs=[Set JVM arguments.]' \
|
'-Dorg.gradle.continuous.quietperiod=[]:->argument-expected' \
|
||||||
'-Dorg.gradle.java.home=[Set JDK home dir.]' \
|
'-Dorg.gradle.daemon.healthcheckinterval=[]:->argument-expected' \
|
||||||
'-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \
|
'-Dorg.gradle.daemon.idletimeout=[]:->argument-expected' \
|
||||||
'-Dorg.gradle.parallel=[Set true to enable parallel project builds.]:(true false)' \
|
'-Dorg.gradle.daemon.registry.base=[]:org.gradle.daemon.registry.base:_directories:->argument-expected' \
|
||||||
'-Dorg.gradle.priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
'-Dorg.gradle.daemon=[Uses the Gradle daemon to run the build. Starts the daemon if not running.]:->argument-expected' \
|
||||||
'-Dorg.gradle.unsafe.watch-fs=[Set true to enable Gradle file watcher.]:enable watcher:(true false)' \
|
'-Dorg.gradle.debug.host=[]:->argument-expected' \
|
||||||
'-Dorg.gradle.warning.mode=[Set types of warnings to log.]:warning level:(all summary none)' \
|
'-Dorg.gradle.debug.port=[]:->argument-expected' \
|
||||||
'-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \
|
'-Dorg.gradle.debug.server=[]:->argument-expected' \
|
||||||
'(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
'-Dorg.gradle.debug.suspend=[]:->argument-expected' \
|
||||||
'(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
'-Dorg.gradle.debug=[]:org.gradle.debug:(true false):->argument-expected' \
|
||||||
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
'-Dorg.gradle.dependency.verification=[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:org.gradle.dependency.verification:(strict lenient off):->argument-expected' \
|
||||||
{-g,--gradle-user-home}'[Specifies the gradle user home directory.]:home directory:_directories:->argument-expected' \
|
'-Dorg.gradle.java.home=[]:org.gradle.java.home:_directories:->argument-expected' \
|
||||||
'(-)--gui[Launches the Gradle GUI. (Removed in Gradle 4.0)]' \
|
'-Dorg.gradle.java.installations.auto-detect=[]:->argument-expected' \
|
||||||
\*--include-build'[Includes the specified build in the composite.]:file:_directories:->argument-expected' \
|
'-Dorg.gradle.java.installations.auto-download=[]:->argument-expected' \
|
||||||
\*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle:->argument-expected' \
|
'-Dorg.gradle.java.installations.fromEnv=[]:->argument-expected' \
|
||||||
'(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \
|
'-Dorg.gradle.java.installations.idea-jdks-directory=[]:org.gradle.java.installations.idea jdks directory:_directories:->argument-expected' \
|
||||||
'--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers:->argument-expected' \
|
'-Dorg.gradle.java.installations.paths=[]:org.gradle.java.installations.paths:_directories:->argument-expected' \
|
||||||
{-m,--dry-run}'[Runs the builds with all task actions disabled.]' \
|
'-Dorg.gradle.jvmargs=[]:->argument-expected' \
|
||||||
'--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \
|
'-Dorg.gradle.logging.level=[]:org.gradle.logging.level:(quiet warn info debug):->argument-expected' \
|
||||||
'(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \
|
'-Dorg.gradle.logging.stacktrace=[]:->argument-expected' \
|
||||||
'(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \
|
'-Dorg.gradle.native=[]:->argument-expected' \
|
||||||
'(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \
|
'-Dorg.gradle.parallel=[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]:org.gradle.parallel:(true false):->argument-expected' \
|
||||||
'(--parallel)--no-parallel[Disables parallel execution to build projects.]' \
|
'-Dorg.gradle.priority=[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:org.gradle.priority:(normal low):->argument-expected' \
|
||||||
'(--scan)--no-scan[Do not create a build scan.]' \
|
'-Dorg.gradle.problems.report=[(Experimental) enables HTML problems report]:->argument-expected' \
|
||||||
'--offline[The build should operate without accessing network resources.]' \
|
'-Dorg.gradle.projectcachedir=[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:org.gradle.projectcachedir:_directories:->argument-expected' \
|
||||||
\*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):->argument-expected' \
|
'-Dorg.gradle.unsafe.isolated-projects=[]:->argument-expected' \
|
||||||
{-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories:->argument-expected' \
|
'-Dorg.gradle.vfs.verbose=[]:->argument-expected' \
|
||||||
'(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
'-Dorg.gradle.vfs.watch=[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]:org.gradle.vfs.watch:(true false):->argument-expected' \
|
||||||
'--priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
'-Dorg.gradle.warning.mode=[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:->argument-expected' \
|
||||||
'--profile[Profiles build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
'-Dorg.gradle.welcome=[]:org.gradle.welcome:(once never):->argument-expected' \
|
||||||
'--project-cache-dir=[Specifies the project-specific cache directory.]:cache directory:_directories:->argument-expected' \
|
'-Dorg.gradle.workers.max=[Configure the number of concurrent workers Gradle is allowed to use.]:->argument-expected' \
|
||||||
'(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \
|
(--no-build-cache)'--build-cache[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]' \
|
||||||
'--recompile-scripts[Force build script recompiling.]' \
|
(--no-configuration-cache)'--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||||
'--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \
|
'--configuration-cache-problems[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:configuration cache problems:(fail warn):->argument-expected' \
|
||||||
'--refresh-dependencies[Refresh the state of dependencies.]' \
|
(--no-configure-on-demand)'--configure-on-demand[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds. (incubating)]' \
|
||||||
'--rerun-tasks[Ignore previously cached task results.]' \
|
'--console[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:console:(plain auto rich verbose):->argument-expected' \
|
||||||
'(--no-scan)--scan[Create a build scan.]' \
|
(--no-continue)'--continue[Continue task execution after a task failure.]' \
|
||||||
'(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
|
||||||
'(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
|
||||||
'(-)--status[Shows status of running and recently stopped Gradle Daemons.]' \
|
|
||||||
'(-)--stop[Stops all Gradle daemons.]' \
|
|
||||||
'--system-prop[system property (prop=val)]' \
|
|
||||||
{-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \
|
{-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \
|
||||||
{-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \
|
(--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||||
'(--write-locks)--update-locks[Perform a partial update of the dependency lock.]' \
|
(--quiet,-q,--warn,-w,--info,-i){-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
||||||
'(-)'{-v,--version}'[Print version info.]' \
|
{-F,--dependency-verification}'[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:dependency verification:(strict lenient off):->argument-expected' \
|
||||||
'(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \
|
{-m,--dry-run}'[Run the builds with all task actions disabled.]' \
|
||||||
'--warning-mode=[Set types of warnings to log.]:warning mode:(all summary none)' \
|
\*{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \
|
||||||
'(--update-locks)--write-locks[Persists dependency resolution for locked configurations.]' \
|
'--export-keys[Exports the public keys used for dependency verification.]' \
|
||||||
'(--no-watch-fs)--watch-fs[Gradle watches filesystem for incremental builds.]' \
|
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
||||||
{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \
|
(--stacktrace,-s){-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
||||||
'(-)*:: :->task-or-option' && ret=0
|
{-g,--gradle-user-home}'[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle user home:_directories:->argument-expected' \
|
||||||
|
{-h,--help}'[Shows a help message.]' \
|
||||||
|
\*'--include-build[Include the specified build in the composite.]:include build:_directories:->argument-expected' \
|
||||||
|
(--quiet,-q,--warn,-w,--debug,-d){-i,--info}'[Set log level to info.]' \
|
||||||
|
\*{-I,--init-script}'[Specify an initialization script.]:init script:_files -g \*.gradle(|.kts):->argument-expected' \
|
||||||
|
'--max-workers[Configure the number of concurrent workers Gradle is allowed to use.]:->argument-expected' \
|
||||||
|
(--build-cache)'--no-build-cache[Disables the Gradle build cache.]' \
|
||||||
|
(--configuration-cache)'--no-configuration-cache[Disables the configuration cache.]' \
|
||||||
|
(--configure-on-demand)'--no-configure-on-demand[Disables the use of configuration on demand. (incubating)]' \
|
||||||
|
(--continue)'--no-continue[Stop task execution after a task failure.]' \
|
||||||
|
(--daemon)'--no-daemon[Do not use the Gradle daemon to run the build. Useful occasionally if you have configured Gradle to always run with the daemon by default.]' \
|
||||||
|
(--parallel)'--no-parallel[Disables parallel execution to build projects.]' \
|
||||||
|
(--problems-report)'--no-problems-report[(Experimental) disables HTML problems report]' \
|
||||||
|
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
||||||
|
(--scan)'--no-scan[Disables the creation of a Build Scan.]' \
|
||||||
|
(--watch-fs)'--no-watch-fs[Disables watching the file system.]' \
|
||||||
|
'--offline[Execute the build without accessing network resources.]' \
|
||||||
|
(--no-parallel)'--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
||||||
|
'--priority[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:->argument-expected' \
|
||||||
|
(--no-problems-report)'--problems-report[(Experimental) enables HTML problems report]' \
|
||||||
|
'--profile[Profile build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
||||||
|
'--project-cache-dir[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:project cache dir:_directories:->argument-expected' \
|
||||||
|
{-p,--project-dir}'[Specifies the start directory for Gradle. Defaults to current directory.]:project dir:_directories:->argument-expected' \
|
||||||
|
'--property-upgrade-report[(Experimental) Runs build with experimental property upgrade report.]' \
|
||||||
|
(--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \
|
||||||
|
{-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \
|
||||||
|
'--refresh-keys[Refresh the public keys used for dependency verification.]' \
|
||||||
|
'--rerun[Causes the task to be re-run even if up-to-date.]' \
|
||||||
|
'--rerun-tasks[Ignore previously cached task results.]' \
|
||||||
|
(--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \
|
||||||
|
{-V,--show-version}'[Print version info and continue.]' \
|
||||||
|
(--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
||||||
|
'--status[Shows status of running and recently stopped Gradle daemon(s).]' \
|
||||||
|
'--stop[Stops the Gradle daemon if it is running.]' \
|
||||||
|
'--task-graph[(Experimental) Print task graph instead of executing tasks.]' \
|
||||||
|
\*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \
|
||||||
|
{-v,--version}'[Print version info and exit.]' \
|
||||||
|
(--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \
|
||||||
|
'--warning-mode[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:warning mode:(all summary none):->argument-expected' \
|
||||||
|
(--no-watch-fs)'--watch-fs[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]' \
|
||||||
|
'--write-locks[Persists dependency resolution for locked configurations, ignoring existing locking information if it exists]' \
|
||||||
|
{-M,--write-verification-metadata}'[Generates checksums for dependencies used in the project (comma-separated list)]:->argument-expected' \
|
||||||
|
'(-)*:: :->task-or-option' && ret=0
|
||||||
|
|
||||||
if [[ $words[CURRENT] != -* && $state != "argument-expected" ]]; then
|
if [[ $words[CURRENT] != -* && $state != "argument-expected" ]]; then
|
||||||
__gradle_tasks && ret=0
|
__gradle_tasks && ret=0
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,14 @@
|
||||||
|
|
||||||
: ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'}
|
: ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'}
|
||||||
: ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'}
|
: ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'}
|
||||||
: ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'}
|
|
||||||
|
# Respect CASE_SENSITIVE setting for case sensitivity
|
||||||
|
if [[ "$CASE_SENSITIVE" = true ]]; then
|
||||||
|
: ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS=''}
|
||||||
|
else
|
||||||
|
: ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'}
|
||||||
|
fi
|
||||||
|
|
||||||
: ${HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=''}
|
: ${HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=''}
|
||||||
: ${HISTORY_SUBSTRING_SEARCH_FUZZY=''}
|
: ${HISTORY_SUBSTRING_SEARCH_FUZZY=''}
|
||||||
: ${HISTORY_SUBSTRING_SEARCH_PREFIXED=''}
|
: ${HISTORY_SUBSTRING_SEARCH_PREFIXED=''}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ This plugin supplies one command, `jira`, through which all its features are exp
|
||||||
| `jira new` | Opens a new Jira issue dialogue |
|
| `jira new` | Opens a new Jira issue dialogue |
|
||||||
| `jira ABC-123` | Opens an existing issue |
|
| `jira ABC-123` | Opens an existing issue |
|
||||||
| `jira ABC-123 m` | Opens an existing issue for adding a comment |
|
| `jira ABC-123 m` | Opens an existing issue for adding a comment |
|
||||||
|
| `jira project ABC` | Opens JIRA project summary |
|
||||||
| `jira dashboard [rapid_view]` | Opens your JIRA dashboard |
|
| `jira dashboard [rapid_view]` | Opens your JIRA dashboard |
|
||||||
| `jira mine` | Queries for your own issues |
|
| `jira mine` | Queries for your own issues |
|
||||||
| `jira tempo` | Opens your JIRA Tempo |
|
| `jira tempo` | Opens your JIRA Tempo |
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ local -a _1st_arguments
|
||||||
_1st_arguments=(
|
_1st_arguments=(
|
||||||
'new:create a new issue'
|
'new:create a new issue'
|
||||||
'mine:open my issues'
|
'mine:open my issues'
|
||||||
|
'project:open the project'
|
||||||
'dashboard:open the dashboard'
|
'dashboard:open the dashboard'
|
||||||
'tempo:open the tempo'
|
'tempo:open the tempo'
|
||||||
'reported:search for issues reported by a user'
|
'reported:search for issues reported by a user'
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ jira Performs the default action
|
||||||
jira new Opens a new Jira issue dialogue
|
jira new Opens a new Jira issue dialogue
|
||||||
jira ABC-123 Opens an existing issue
|
jira ABC-123 Opens an existing issue
|
||||||
jira ABC-123 m Opens an existing issue for adding a comment
|
jira ABC-123 m Opens an existing issue for adding a comment
|
||||||
|
jira project ABC Opens JIRA project summary
|
||||||
jira dashboard [rapid_view] Opens your JIRA dashboard
|
jira dashboard [rapid_view] Opens your JIRA dashboard
|
||||||
jira mine Queries for your own issues
|
jira mine Queries for your own issues
|
||||||
jira tempo Opens your JIRA Tempo
|
jira tempo Opens your JIRA Tempo
|
||||||
|
|
@ -88,6 +89,9 @@ function jira() {
|
||||||
elif [[ "$action" == "mine" ]]; then
|
elif [[ "$action" == "mine" ]]; then
|
||||||
echo "Opening my issues"
|
echo "Opening my issues"
|
||||||
open_command "${jira_url}/issues/?filter=-1"
|
open_command "${jira_url}/issues/?filter=-1"
|
||||||
|
elif [[ "$action" == "project" ]]; then
|
||||||
|
echo "Opening project"
|
||||||
|
open_command "${jira_url}/jira/software/c/projects/${2}/summary"
|
||||||
elif [[ "$action" == "dashboard" ]]; then
|
elif [[ "$action" == "dashboard" ]]; then
|
||||||
echo "Opening dashboard"
|
echo "Opening dashboard"
|
||||||
if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
|
if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
|
||||||
|
|
|
||||||
107
plugins/jj/README.md
Normal file
107
plugins/jj/README.md
Normal file
|
|
@ -0,0 +1,107 @@
|
||||||
|
# jj - Jujutsu CLI
|
||||||
|
|
||||||
|
This plugin provides autocompletion for [jj](https://martinvonz.github.io/jj).
|
||||||
|
|
||||||
|
To use it, add `jj` to the plugins array of your zshrc file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
plugins=(... jj)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Aliases
|
||||||
|
|
||||||
|
| Alias | Command |
|
||||||
|
| ------ | ----------------------------- |
|
||||||
|
| jjb | `jj bookmark` |
|
||||||
|
| jjbc | `jj bookmark create` |
|
||||||
|
| jjbd | `jj bookmark delete` |
|
||||||
|
| jjbf | `jj bookmark forget` |
|
||||||
|
| jjbl | `jj bookmark list` |
|
||||||
|
| jjbm | `jj bookmark move` |
|
||||||
|
| jjbr | `jj bookmark rename` |
|
||||||
|
| jjbs | `jj bookmark set` |
|
||||||
|
| jjbt | `jj bookmark track` |
|
||||||
|
| jjbu | `jj bookmark untrack` |
|
||||||
|
| jjc | `jj commit` |
|
||||||
|
| jjcmsg | `jj commit --message` |
|
||||||
|
| jjd | `jj diff` |
|
||||||
|
| jjdmsg | `jj desc --message` |
|
||||||
|
| jjds | `jj desc` |
|
||||||
|
| jje | `jj edit` |
|
||||||
|
| jjgcl | `jj git clone` |
|
||||||
|
| jjgf | `jj git fetch` |
|
||||||
|
| jjgfa | `jj git fetch --all-remotes` |
|
||||||
|
| jjgp | `jj git push` |
|
||||||
|
| jjgpa | `jj git push --all` |
|
||||||
|
| jjgpd | `jj git push --deleted` |
|
||||||
|
| jjgpt | `jj git push --tracked` |
|
||||||
|
| jjl | `jj log` |
|
||||||
|
| jjla | `jj log -r "all()"` |
|
||||||
|
| jjn | `jj new` |
|
||||||
|
| jjnt | `jj new "trunk()"` |
|
||||||
|
| jjrb | `jj rebase` |
|
||||||
|
| jjrbm | `jj rebase -d "trunk()"` |
|
||||||
|
| jjrs | `jj restore` |
|
||||||
|
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
||||||
|
| jjsp | `jj split` |
|
||||||
|
| jjsq | `jj squash` |
|
||||||
|
| jjst | `jj status` |
|
||||||
|
|
||||||
|
## Prompt usage
|
||||||
|
|
||||||
|
Because `jj` has a very powerful [template syntax](https://martinvonz.github.io/jj/latest/templates/), this
|
||||||
|
plugin only exposes a convenience function `jj_prompt_template` to read information from the current change.
|
||||||
|
It is basically the same as `jj log --no-graph -r @ -T $1`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
_my_theme_jj_info() {
|
||||||
|
jj_prompt_template 'self.change_id().shortest(3)'
|
||||||
|
}
|
||||||
|
|
||||||
|
PROMPT='$(_my_theme_jj_info) $'
|
||||||
|
```
|
||||||
|
|
||||||
|
`jj_prompt_template` escapes `%` signs in the output. Use `jj_prompt_template_raw` if you don't want that
|
||||||
|
(e.g. to colorize the output).
|
||||||
|
|
||||||
|
However, because `jj` can be used inside a Git repository, some themes might clash with it. Generally, you can
|
||||||
|
fix it with a wrapper function that tries `jj` first and then falls back to `git` if it didn't work:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
_my_theme_vcs_info() {
|
||||||
|
jj_prompt_template 'self.change_id().shortest(3)' \
|
||||||
|
|| git_prompt_info
|
||||||
|
}
|
||||||
|
|
||||||
|
PROMPT='$(_my_theme_vcs_info) $'
|
||||||
|
```
|
||||||
|
|
||||||
|
You can find an example
|
||||||
|
[here](https://github.com/nasso/omzsh/blob/e439e494f22f4fd4ef1b6cb64626255f4b341c1b/themes/sunakayu.zsh-theme).
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
Sometimes `jj` can be slower than `git`.
|
||||||
|
|
||||||
|
If you feel slowdowns, consider using the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
zstyle :omz:plugins:jj ignore-working-copy yes
|
||||||
|
```
|
||||||
|
|
||||||
|
This will add `--ignore-working-copy` to all `jj` commands executed by your prompt. The downside here is that
|
||||||
|
your prompt might be out-of-sync until the next time `jj` gets a chance to _not_ ignore the working copy (i.e.
|
||||||
|
you manually run a `jj` command).
|
||||||
|
|
||||||
|
If you prefer to keep your prompt always up-to-date but still don't want to _feel_ the slowdown, you can make
|
||||||
|
your prompt asynchronous. This plugin doesn't do this automatically so you'd have to hack your theme a bit for
|
||||||
|
that.
|
||||||
|
|
||||||
|
## See Also
|
||||||
|
|
||||||
|
- [martinvonz/jj](https://github.com/martinvonz/jj)
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
- [nasso](https://github.com/nasso) - Plugin Author
|
||||||
|
- [imp](https://github.com/imp) - Occasional Alias Contributor
|
||||||
70
plugins/jj/jj.plugin.zsh
Normal file
70
plugins/jj/jj.plugin.zsh
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
# if jj is not found, don't do the rest of the script
|
||||||
|
if (( ! $+commands[jj] )); then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If the completion file doesn't exist yet, we need to autoload it and
|
||||||
|
# bind it to `jj`. Otherwise, compinit will have already done that.
|
||||||
|
if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then
|
||||||
|
typeset -g -A _comps
|
||||||
|
autoload -Uz _jj
|
||||||
|
_comps[jj]=_jj
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMPLETE=zsh jj >| "$ZSH_CACHE_DIR/completions/_jj" &|
|
||||||
|
|
||||||
|
function __jj_prompt_jj() {
|
||||||
|
local -a flags
|
||||||
|
flags=("--no-pager")
|
||||||
|
if zstyle -t ':omz:plugins:jj' ignore-working-copy; then
|
||||||
|
flags+=("--ignore-working-copy")
|
||||||
|
fi
|
||||||
|
command jj $flags "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# convenience functions for themes
|
||||||
|
function jj_prompt_template_raw() {
|
||||||
|
__jj_prompt_jj log --no-graph -r @ -T "$@" 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function jj_prompt_template() {
|
||||||
|
local out
|
||||||
|
out=$(jj_prompt_template_raw "$@") || return 1
|
||||||
|
echo "${out:gs/%/%%}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Aliases (sorted alphabetically)
|
||||||
|
alias jjb='jj bookmark'
|
||||||
|
alias jjbc='jj bookmark create'
|
||||||
|
alias jjbd='jj bookmark delete'
|
||||||
|
alias jjbf='jj bookmark forget'
|
||||||
|
alias jjbl='jj bookmark list'
|
||||||
|
alias jjbm='jj bookmark move'
|
||||||
|
alias jjbr='jj bookmark rename'
|
||||||
|
alias jjbs='jj bookmark set'
|
||||||
|
alias jjbt='jj bookmark track'
|
||||||
|
alias jjbu='jj bookmark untrack'
|
||||||
|
alias jjc='jj commit'
|
||||||
|
alias jjcmsg='jj commit --message'
|
||||||
|
alias jjd='jj diff'
|
||||||
|
alias jjdmsg='jj desc --message'
|
||||||
|
alias jjds='jj desc'
|
||||||
|
alias jje='jj edit'
|
||||||
|
alias jjgcl='jj git clone'
|
||||||
|
alias jjgf='jj git fetch'
|
||||||
|
alias jjgfa='jj git fetch --all-remotes'
|
||||||
|
alias jjgp='jj git push'
|
||||||
|
alias jjgpa='jj git push --all'
|
||||||
|
alias jjgpd='jj git push --deleted'
|
||||||
|
alias jjgpt='jj git push --tracked'
|
||||||
|
alias jjl='jj log'
|
||||||
|
alias jjla='jj log -r "all()"'
|
||||||
|
alias jjn='jj new'
|
||||||
|
alias jjnt='jj new "trunk()"'
|
||||||
|
alias jjrb='jj rebase'
|
||||||
|
alias jjrbm='jj rebase -d "trunk()"'
|
||||||
|
alias jjrs='jj restore'
|
||||||
|
alias jjrt='cd "$(jj root || echo .)"'
|
||||||
|
alias jjsp='jj split'
|
||||||
|
alias jjsq='jj squash'
|
||||||
|
alias jjst='jj status'
|
||||||
16
plugins/kamal/README.md
Normal file
16
plugins/kamal/README.md
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Kamal
|
||||||
|
|
||||||
|
This plugin provides completion for [Kamal](https://kamal-deploy.org/) as well as some
|
||||||
|
aliases for frequent Kamal commands.
|
||||||
|
|
||||||
|
To use it, add kamal to the plugins array of your zshrc file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
plugins=(... kamal)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Aliase
|
||||||
|
|
||||||
|
| Alias | Command | Description |
|
||||||
|
|-----------|----------------------------------|----------------------------------------------------------------------------------|
|
||||||
|
| kad | `kamal deploy` | Deploy app to servers |
|
||||||
691
plugins/kamal/_kamal
Normal file
691
plugins/kamal/_kamal
Normal file
|
|
@ -0,0 +1,691 @@
|
||||||
|
#compdef kamal
|
||||||
|
|
||||||
|
# Description
|
||||||
|
# -----------
|
||||||
|
# zsh completion for Kamal (https://kamal-deploy.org/)
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
# Authors
|
||||||
|
# -------
|
||||||
|
# * Igor Aleksandrov <igor.alexandrov@gmail.com>
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
# Inspiration
|
||||||
|
# -----------
|
||||||
|
# * docker-compose ohmyzsh completion script by @sdurrheimer Steve Durrheimer
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# _kamal_commands() {
|
||||||
|
# # Only initialize if empty
|
||||||
|
# if (( ${#kamal_commands} == 0 )); then
|
||||||
|
# kamal_commands=(
|
||||||
|
# accessory
|
||||||
|
# app
|
||||||
|
# audit
|
||||||
|
# build
|
||||||
|
# config
|
||||||
|
# deploy
|
||||||
|
# details
|
||||||
|
# docs
|
||||||
|
# help
|
||||||
|
# init
|
||||||
|
# lock
|
||||||
|
# proxy
|
||||||
|
# prune
|
||||||
|
# redeploy
|
||||||
|
# registry
|
||||||
|
# remove
|
||||||
|
# rollback
|
||||||
|
# secrets
|
||||||
|
# server
|
||||||
|
# setup
|
||||||
|
# upgrade
|
||||||
|
# version
|
||||||
|
# )
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# _values 'Kamal commands' $kamal_commands
|
||||||
|
# }
|
||||||
|
|
||||||
|
typeset -gr _kamal_commands=(
|
||||||
|
'accessory:Control accessory services'
|
||||||
|
'app:Control application deployment'
|
||||||
|
'audit:Audit security of deployment'
|
||||||
|
'build:Build and manage app images'
|
||||||
|
'config:Show effective configuration'
|
||||||
|
'deploy:Deploy app to servers'
|
||||||
|
'details:Show details about deployment'
|
||||||
|
'docs:Open documentation in browser'
|
||||||
|
'help:Show command help'
|
||||||
|
'init:Initialize new Kamal project'
|
||||||
|
'lock:Manage deployment locks'
|
||||||
|
'proxy:Control reverse proxy'
|
||||||
|
'prune:Clean up containers and images'
|
||||||
|
'redeploy:Redeploy current version'
|
||||||
|
'registry:Manage Docker registry access'
|
||||||
|
'remove:Remove app from servers'
|
||||||
|
'rollback:Rollback to a previous version'
|
||||||
|
'secrets:Manage deployment secrets'
|
||||||
|
'server:Control server configuration'
|
||||||
|
'setup:Setup initial deployment'
|
||||||
|
'upgrade:Upgrade deployment'
|
||||||
|
'version:Show Kamal version'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Helper function to display messages
|
||||||
|
_kamal_message() {
|
||||||
|
local msg="$1"
|
||||||
|
_kamal_message "==> $msg"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to extract destination names from ./config/deploy.*.yml
|
||||||
|
_kamal_destinations() {
|
||||||
|
local -a dests
|
||||||
|
local file
|
||||||
|
|
||||||
|
# Check if config directory exists
|
||||||
|
if [[ ! -d "config" ]]; then
|
||||||
|
_kamal_message "Cannot find Kamal configuration directory at ./config" && return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for file in config/deploy.*.yml(N); do
|
||||||
|
[[ $file =~ config/deploy\.(.+)\.yml ]] && dests+=("${match[1]}")
|
||||||
|
done
|
||||||
|
|
||||||
|
_values 'Destination' $dests
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define global _kamal_flags array
|
||||||
|
typeset -ga _kamal_flags
|
||||||
|
_kamal_flags=(
|
||||||
|
'(-v --verbose )'{-v,--verbose}'[Detailed logging]'
|
||||||
|
'(--no-verbose --skip-verbose)'{--no-verbose,--skip-verbose}'[No detailed logging]'
|
||||||
|
'(-q --quiet --no-quiet --skip-quiet)'{-q,--quiet}'[Minimal logging]'
|
||||||
|
'(-q --quiet --no-quiet --skip-quiet)'{--no-quiet,--skip-quiet}'[No minimal logging]'
|
||||||
|
'--version=[Run commands against a specific app version]:version'
|
||||||
|
'(-p --primary --no-primary --skip-primary)'{-p,--primary}'[Run commands only on primary host instead of all]'
|
||||||
|
'(-p --primary --no-primary --skip-primary)'{--no-primary,--skip-primary}'[Do not run commands only on primary host]'
|
||||||
|
'(-h --hosts)'{-h,--hosts=}'[Run commands on these hosts instead of all]:hosts'
|
||||||
|
'(-r --roles)'{-r,--roles=}'[Run commands on these roles instead of all]:roles'
|
||||||
|
'(-c --config-file)'{-c,--config-file=}'[Path to config file]:config file:_files'
|
||||||
|
'(-d --destination)'{-d,--destination=}'[Specify destination to be used for config file]:destination:_kamal_destinations'
|
||||||
|
'(-H --skip-hooks)'{-H,--skip-hooks}'[Do not run hooks]'
|
||||||
|
)
|
||||||
|
|
||||||
|
_kamal() {
|
||||||
|
local context state state_descr line curcontext="$curcontext"
|
||||||
|
typeset -A opt_args
|
||||||
|
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
$_kamal_flags \
|
||||||
|
'1: :->command' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(command)
|
||||||
|
# First argument - show available commands
|
||||||
|
_describe -t kamal-commands "Kamal commands" _kamal_commands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
# Subsequent arguments - handle based on the command
|
||||||
|
case $words[1] in
|
||||||
|
(accessory)
|
||||||
|
_kamal_accessory && ret=0
|
||||||
|
;;
|
||||||
|
(app)
|
||||||
|
_kamal_app && ret=0
|
||||||
|
;;
|
||||||
|
(audit)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(build)
|
||||||
|
_kamal_build && ret=0
|
||||||
|
;;
|
||||||
|
(config)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(deploy)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(details)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(docs)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
_kamal_help && ret=0
|
||||||
|
;;
|
||||||
|
(init)
|
||||||
|
local -a init_flags
|
||||||
|
init_flags=(
|
||||||
|
$_kamal_flags
|
||||||
|
'(--bundle --no-bundle --skip-bundle)--bundle[Add Kamal to the Gemfile and create a bin/kamal binstub]'
|
||||||
|
'(--bundle --no-bundle --skip-bundle)--no-bundle[Do not add Kamal to the Gemfile and create a bin/kamal binstub]'
|
||||||
|
'(--bundle --no-bundle --skip-bundle)--skip-bundle[Skip add Kamal to the Gemfile and create a bin/kamal binstub]'
|
||||||
|
)
|
||||||
|
_arguments $init_flags && ret=0
|
||||||
|
;;
|
||||||
|
(lock)
|
||||||
|
_kamal_lock && ret=0
|
||||||
|
;;
|
||||||
|
(proxy)
|
||||||
|
_kamal_proxy && ret=0
|
||||||
|
;;
|
||||||
|
(prune)
|
||||||
|
_kamal_prune && ret=0
|
||||||
|
;;
|
||||||
|
(redeploy)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(registry)
|
||||||
|
_kamal_registry && ret=0
|
||||||
|
;;
|
||||||
|
(remove)
|
||||||
|
local -a remove_flags
|
||||||
|
remove_flags=(
|
||||||
|
$_kamal_flags
|
||||||
|
'(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]'
|
||||||
|
'(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Proceed without confirmation question]'
|
||||||
|
'(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Proceed without confirmation question]'
|
||||||
|
)
|
||||||
|
_arguments $remove_flags && ret=0
|
||||||
|
;;
|
||||||
|
(rollback)
|
||||||
|
if (( CURRENT == 2 )); then
|
||||||
|
_kamal_message "Enter the version to rollback to" && ret=0
|
||||||
|
else
|
||||||
|
_values $_kamal_flags && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
(secrets)
|
||||||
|
_kamal_secrets && ret=0
|
||||||
|
;;
|
||||||
|
(server)
|
||||||
|
_kamal_server && ret=0
|
||||||
|
;;
|
||||||
|
(setup)
|
||||||
|
local -a setup_flags
|
||||||
|
setup_flags=(
|
||||||
|
$_kamal_flags
|
||||||
|
'(-P --skip-push)'{-P,--skip-push}'[Skip image build and push]'
|
||||||
|
)
|
||||||
|
_arguments $setup_flags && ret=0
|
||||||
|
;;
|
||||||
|
(upgrade)
|
||||||
|
local -a upgrade_flags
|
||||||
|
upgrade_flags=(
|
||||||
|
$_kamal_flags
|
||||||
|
'(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]'
|
||||||
|
'(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Do not proceed without confirmation question]'
|
||||||
|
'(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Skip confirmation question]'
|
||||||
|
'(--rolling --no-rolling --skip-rolling)--rolling[Upgrade one host at a time]'
|
||||||
|
'(--rolling --no-rolling --skip-rolling)--no-rolling[Do not upgrade one host at a time]'
|
||||||
|
'(--rolling --no-rolling --skip-rolling)--skip-rolling[Skip rolling upgrade]'
|
||||||
|
)
|
||||||
|
_arguments $upgrade_flags && ret=0
|
||||||
|
;;
|
||||||
|
(version)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_accessory() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
# Define accessory subcommands
|
||||||
|
local -a accessory_subcommands
|
||||||
|
accessory_subcommands=(
|
||||||
|
"boot:Boot new accessory service on host (use NAME=all to boot all accessories)"
|
||||||
|
"details:Show details about accessory on host (use NAME=all to show all accessories)"
|
||||||
|
"exec:Execute a custom command on servers within the accessory container (use --help to show options)"
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"logs:Show log lines from accessory on host (use --help to show options)"
|
||||||
|
"reboot:Reboot existing accessory on host (stop container, remove container, start new container; use NAME=all to boot all accessories)"
|
||||||
|
"remove:Remove accessory container, image and data directory from host (use NAME=all to remove all accessories)"
|
||||||
|
"restart:Restart existing accessory container on host"
|
||||||
|
"start:Start existing accessory container on host"
|
||||||
|
"stop:Stop existing accessory container on host"
|
||||||
|
"upgrade:Upgrade accessories from Kamal 1.x to 2.0 (restart them in 'kamal' network)"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t accessory-commands "Kamal accessory commands" accessory_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(boot|details|exec|logs|reboot|remove|restart|start|stop)
|
||||||
|
# These commands require a NAME parameter
|
||||||
|
if (( CURRENT == 2 )); then
|
||||||
|
# At the NAME position - we could add accessory name completion here
|
||||||
|
# if we had a way to list available accessories
|
||||||
|
_kamal_message "Specify an accessory name (or 'all' for all accessories)" && ret=0
|
||||||
|
elif [[ "$words[1]" == "exec" && CURRENT == 3 ]]; then
|
||||||
|
# For exec, the 3rd argument is a command
|
||||||
|
_kamal_message "Enter a command to execute" && ret=0
|
||||||
|
elif (( CURRENT > 2 )) && [[ "$words[1]" != "exec" || CURRENT > 3 ]]; then
|
||||||
|
_values $_kamal_flags && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
accessory_subcommands=("${(@)accessory_subcommands:#help*}")
|
||||||
|
_describe -t accessory-help-commands "Kamal accessory help commands" accessory_subcommands
|
||||||
|
;;
|
||||||
|
(upgrade)
|
||||||
|
# For upgrade, show flags immediately
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_app() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a app_subcommands
|
||||||
|
app_subcommands=(
|
||||||
|
"boot:Boot app on servers (or reboot app if already running)"
|
||||||
|
"containers:Show app containers on servers"
|
||||||
|
"details:Show details about app containers"
|
||||||
|
"exec:Execute a custom command on servers within the app container (use --help to show options)"
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"images:Show app images on servers"
|
||||||
|
"logs:Show log lines from app on servers (use --help to show options)"
|
||||||
|
"remove:Remove app containers and images from servers"
|
||||||
|
"stale_containers:Detect app stale containers"
|
||||||
|
"start:Start existing app container on servers"
|
||||||
|
"stop:Stop app container on servers"
|
||||||
|
"version:Show app version currently running on servers"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t app-commands "Kamal app commands" app_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(boot|containers|details|images|logs|remove|stale_containers|start|stop)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(exec)
|
||||||
|
# For exec, the next argument is a command
|
||||||
|
if (( CURRENT == 2 )); then
|
||||||
|
_kamal_message "Enter a command to execute" && ret=0
|
||||||
|
else
|
||||||
|
_values $_kamal_flags && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
app_subcommands=("${(@)app_subcommands:#help*}")
|
||||||
|
_describe -t app-help-commands "Kamal app help commands" app_subcommands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_build() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a build_subcommands
|
||||||
|
build_subcommands=(
|
||||||
|
"create:Create a build setup"
|
||||||
|
"deliver:Build app and push app image to registry then pull image on servers"
|
||||||
|
"details:Show build setup"
|
||||||
|
"dev:Build using the working directory, tag it as dirty, and push to local image store."
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"pull:Pull app image from registry onto servers"
|
||||||
|
"push:Build and push app image to registry"
|
||||||
|
"remove:Remove build setup"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t build-commands "Kamal build commands" build_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(create|deliver|details|dev|pull|push|remove)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
build_subcommands=("${(@)build_subcommands:#help*}")
|
||||||
|
_describe -t build-help-commands "Kamal build help commands" build_subcommands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_help() {
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
# Make sure kamal_commands is initialized properly
|
||||||
|
# if (( ${#kamal_commands} == 0 )); then
|
||||||
|
# _kamal_commands >/dev/null
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# If we already have a command after "help", return without suggestions
|
||||||
|
if (( CURRENT > 2 )); then
|
||||||
|
ret=0
|
||||||
|
else
|
||||||
|
local -a help_commands
|
||||||
|
# Filter out help from the list of commands
|
||||||
|
help_commands=("${(@)_kamal_commands:#help}")
|
||||||
|
|
||||||
|
_values 'Kamal help' $help_commands && ret=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_lock() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a lock_subcommands
|
||||||
|
lock_subcommands=(
|
||||||
|
"acquire:Acquire the deploy lock"
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"release:Release the deploy lock"
|
||||||
|
"status:Report lock status"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t lock-commands "Kamal lock commands" lock_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(acquire)
|
||||||
|
local -a acquire_flags
|
||||||
|
acquire_flags=(
|
||||||
|
$_kamal_flags
|
||||||
|
'(-m --message)'{-m,--message=}'[A lock message]:message:' # Required flag
|
||||||
|
)
|
||||||
|
_arguments $acquire_flags && ret=0
|
||||||
|
;;
|
||||||
|
(release|status)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
lock_subcommands=("${(@)lock_subcommands:#help*}")
|
||||||
|
_describe -t lock-help-commands "Kamal lock help commands" lock_subcommands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_proxy() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a proxy_subcommands
|
||||||
|
proxy_subcommands=(
|
||||||
|
"boot:Boot proxy on servers"
|
||||||
|
"boot_config:Manage kamal-proxy boot configuration"
|
||||||
|
"details:Show details about proxy container from servers"
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"logs:Show log lines from proxy on servers"
|
||||||
|
"reboot:Reboot proxy on servers (stop container, remove container, start new container)"
|
||||||
|
"remove:Remove proxy container and image from servers"
|
||||||
|
"restart:Restart existing proxy container on servers"
|
||||||
|
"start:Start existing proxy container on servers"
|
||||||
|
"stop:Stop existing proxy container on servers"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t proxy-commands "Kamal proxy commands" proxy_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(boot|details|logs|reboot|remove|restart|start|stop)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(boot_config)
|
||||||
|
if (( CURRENT == 2 )); then
|
||||||
|
local -a boot_config_commands=(
|
||||||
|
"set:Set boot configuration"
|
||||||
|
"get:Get boot configuration"
|
||||||
|
"reset:Reset boot configuration"
|
||||||
|
)
|
||||||
|
_describe -t boot-config-commands "Boot config commands" boot_config_commands && ret=0
|
||||||
|
else
|
||||||
|
_values $_kamal_flags && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
proxy_subcommands=("${(@)proxy_subcommands:#help*}")
|
||||||
|
_describe -t proxy-help-commands "Kamal proxy help commands" proxy_subcommands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_prune() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a prune_subcommands
|
||||||
|
prune_subcommands=(
|
||||||
|
"all:Prune unused images and stopped containers"
|
||||||
|
"containers:Prune all stopped containers, except the last n (default 5)"
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"images:Prune unused images"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t prune-commands "Kamal prune commands" prune_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(all|containers|images)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
prune_subcommands=("${(@)prune_subcommands:#help*}")
|
||||||
|
_describe -t prune-help-commands "Kamal prune help commands" prune_subcommands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_registry() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a registry_subcommands
|
||||||
|
registry_subcommands=(
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"login:Log in to registry locally and remotely"
|
||||||
|
"logout:Log out of registry locally and remotely"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t registry-commands "Kamal registry commands" registry_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
registry_subcommands=("${(@)registry_subcommands:#help*}")
|
||||||
|
_describe -t registry-help-commands "Kamal registry help commands" registry_subcommands
|
||||||
|
;;
|
||||||
|
(login|logout)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_secrets() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a secrets_subcommands
|
||||||
|
secrets_subcommands=(
|
||||||
|
"extract:Extract a single secret from the results of a fetch call"
|
||||||
|
"fetch:Fetch secrets from a vault"
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
"print:Print the secrets (for debugging)"
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t secrets-commands "Kamal secrets commands" secrets_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(fetch)
|
||||||
|
local -a fetch_flags
|
||||||
|
fetch_flags=(
|
||||||
|
$_kamal_flags
|
||||||
|
'(-a --adapter)'{-a,--adapter=}'[Secret storage adapter]:adapter:(aws-parameter-store)'
|
||||||
|
)
|
||||||
|
_arguments $fetch_flags && ret=0
|
||||||
|
;;
|
||||||
|
(extract|print)
|
||||||
|
_arguments $_kamal_flags && ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
secrets_subcommands=("${(@)secrets_subcommands:#help*}")
|
||||||
|
_describe -t secrets-help-commands "Kamal secrets help commands" secrets_subcommands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal_server() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
local -a server_subcommands
|
||||||
|
server_subcommands=(
|
||||||
|
"bootstrap:Set up Docker to run Kamal apps"
|
||||||
|
"exec:Run a custom command on the server (use --help to show options)"
|
||||||
|
"help:Describe subcommands or one specific subcommand"
|
||||||
|
)
|
||||||
|
|
||||||
|
local -a server_flags
|
||||||
|
server_flags=(
|
||||||
|
$_kamal_flags
|
||||||
|
'(-i --interactive --no-interactive --skip-interactive)'{-i,--interactive}'[Run the command interactively]'
|
||||||
|
'(-i --interactive --no-interactive --skip-interactive)--no-interactive[Do not run the command interactively]'
|
||||||
|
'(-i --interactive --no-interactive --skip-interactive)--skip-interactive[Skip interactive mode]'
|
||||||
|
)
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->subcmd' \
|
||||||
|
'*:: :->args' && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(subcmd)
|
||||||
|
_describe -t server-commands "Kamal server commands" server_subcommands && ret=0
|
||||||
|
;;
|
||||||
|
(args)
|
||||||
|
case $words[1] in
|
||||||
|
(bootstrap)
|
||||||
|
_arguments $server_flags && ret=0
|
||||||
|
;;
|
||||||
|
(exec)
|
||||||
|
if (( CURRENT == 2 )); then
|
||||||
|
# For exec, the next argument is a command
|
||||||
|
_kamal_message "Enter a command to execute" && ret=0
|
||||||
|
else
|
||||||
|
_values $server_flags && ret=0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
# Remove help itself from the list of commands
|
||||||
|
server_subcommands=("${(@)server_subcommands:#help*}")
|
||||||
|
_describe -t server-help-commands "Kamal server help commands" server_subcommands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_kamal "$@"
|
||||||
25
plugins/kamal/kamal.plugin.zsh
Normal file
25
plugins/kamal/kamal.plugin.zsh
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Find kamal binary (local ./bin/kamal or global)
|
||||||
|
function _kamal_command () {
|
||||||
|
if [ -x "./bin/kamal" ]; then
|
||||||
|
./bin/kamal "$@"
|
||||||
|
else
|
||||||
|
command kamal "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function which-kamal() {
|
||||||
|
if [ -x "./bin/kamal" ]; then
|
||||||
|
echo "Using local ./bin/kamal"
|
||||||
|
else
|
||||||
|
echo "Using global $(command -v kamal)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use `_kamal_command`` function for `kamal` command
|
||||||
|
alias kamal='_kamal_command'
|
||||||
|
|
||||||
|
# Aliases
|
||||||
|
alias kad='kamal deploy'
|
||||||
|
|
||||||
|
# Hook up completion
|
||||||
|
compdef _kamal_command=kamal
|
||||||
|
|
@ -19,8 +19,16 @@ function {
|
||||||
# load additional options
|
# load additional options
|
||||||
zstyle -a :omz:plugins:keychain options options
|
zstyle -a :omz:plugins:keychain options options
|
||||||
|
|
||||||
# start keychain...
|
# Check keychain version to decide whether to use --agents
|
||||||
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
|
local version_string=$(keychain --version 2>&1)
|
||||||
|
# start keychain, only use --agents for versions below 2.9.0
|
||||||
|
autoload -Uz is-at-least
|
||||||
|
if [[ "$version_string" =~ 'keychain ([0-9]+\.[0-9]+)' ]] && \
|
||||||
|
is-at-least 2.9 "$match[1]"; then
|
||||||
|
keychain ${^options:-} ${^identities} --host $SHORT_HOST
|
||||||
|
else
|
||||||
|
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
|
||||||
|
fi
|
||||||
|
|
||||||
# Get the filenames to store/lookup the environment from
|
# Get the filenames to store/lookup the environment from
|
||||||
_keychain_env_sh="$HOME/.keychain/$SHORT_HOST-sh"
|
_keychain_env_sh="$HOME/.keychain/$SHORT_HOST-sh"
|
||||||
|
|
|
||||||
12
plugins/kompose/README.md
Normal file
12
plugins/kompose/README.md
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
# kompose
|
||||||
|
|
||||||
|
This plugin provides completion for [kompose](https://github.com/kubernetes/kompose),
|
||||||
|
to migrate from docker compose to Kubernetes resource definitions.
|
||||||
|
|
||||||
|
To use it, add `kompose` to the plugins array in your zshrc file.
|
||||||
|
|
||||||
|
```
|
||||||
|
plugins=(... kompose)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Author:** [@kevinkirkup](https://github.com/kevinkirkup)
|
||||||
3
plugins/kompose/kompose.plugin.zsh
Normal file
3
plugins/kompose/kompose.plugin.zsh
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
if [ $commands[kompose] ]; then
|
||||||
|
source <(kompose completion zsh)
|
||||||
|
fi
|
||||||
|
|
@ -11,124 +11,130 @@ plugins=(... kubectl)
|
||||||
|
|
||||||
## Aliases
|
## Aliases
|
||||||
|
|
||||||
| Alias | Command | Description |
|
| Alias | Command | Description |
|
||||||
| :------- | :------------------------------------------------- | :----------------------------------------------------------------------------------------------- |
|
| :------- | :------------------------------------------------------ | :----------------------------------------------------------------------------------------------- |
|
||||||
| 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 |
|
||||||
| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
|
| kapk | `kubectl apply -k` | Apply a kustomization directory |
|
||||||
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
|
||||||
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
||||||
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
||||||
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
||||||
| kccc | `kubectl config current-context` | Display the current-context |
|
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
||||||
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
| kccc | `kubectl config current-context` | Display the current-context |
|
||||||
| | | **General aliases** |
|
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
||||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
| | | **General aliases** |
|
||||||
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
|
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||||
| | | **Pod management** |
|
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
|
||||||
| kgp | `kubectl get pods` | List all pods in ps output format |
|
| kdelk | `kubectl delete -k` | Delete all resources defined in a kustomization directory |
|
||||||
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
| kge | `kubectl get events --sort-by=".lastTimestamp"` | Get events (sorted by timestamp) |
|
||||||
| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` |
|
| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) |
|
||||||
| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels |
|
| | | **Pod management** |
|
||||||
| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes |
|
| kgp | `kubectl get pods` | List all pods in ps output format |
|
||||||
| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included |
|
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
||||||
| kep | `kubectl edit pods` | Edit pods from the default editor |
|
| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` |
|
||||||
| kdp | `kubectl describe pods` | Describe all pods |
|
| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels |
|
||||||
| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments |
|
| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes |
|
||||||
| | | **Service management** |
|
| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included |
|
||||||
| kgs | `kubectl get svc` | List all services in ps output format |
|
| kep | `kubectl edit pods` | Edit pods from the default editor |
|
||||||
| kgsw | `kgs --watch` | After listing all services, watch for changes |
|
| kdp | `kubectl describe pods` | Describe all pods |
|
||||||
| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information |
|
| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments |
|
||||||
| kes | `kubectl edit svc` | Edit services(svc) from the default editor |
|
| | | **Service management** |
|
||||||
| kds | `kubectl describe svc` | Describe all services in detail |
|
| kgs | `kubectl get svc` | List all services in ps output format |
|
||||||
| kdels | `kubectl delete svc` | Delete all services matching passed argument |
|
| kgsw | `kgs --watch` | After listing all services, watch for changes |
|
||||||
| | | **Ingress management** |
|
| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information |
|
||||||
| kgi | `kubectl get ingress` | List ingress resources in ps output format |
|
| kes | `kubectl edit svc` | Edit services(svc) from the default editor |
|
||||||
| kei | `kubectl edit ingress` | Edit ingress resource from the default editor |
|
| kds | `kubectl describe svc` | Describe all services in detail |
|
||||||
| kdi | `kubectl describe ingress` | Describe ingress resource in detail |
|
| kdels | `kubectl delete svc` | Delete all services matching passed argument |
|
||||||
| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument |
|
| | | **Ingress management** |
|
||||||
| | | **Namespace management** |
|
| kgi | `kubectl get ingress` | List ingress resources in ps output format |
|
||||||
| kgns | `kubectl get namespaces` | List the current namespaces in a cluster |
|
| kei | `kubectl edit ingress` | Edit ingress resource from the default editor |
|
||||||
| kcn | `kubectl config set-context --current --namespace` | Change current namespace |
|
| kdi | `kubectl describe ingress` | Describe ingress resource in detail |
|
||||||
| kens | `kubectl edit namespace` | Edit namespace resource from the default editor |
|
| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument |
|
||||||
| kdns | `kubectl describe namespace` | Describe namespace resource in detail |
|
| | | **Namespace management** |
|
||||||
| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace |
|
| kgns | `kubectl get namespaces` | List the current namespaces in a cluster |
|
||||||
| | | **ConfigMap management** |
|
| kcn | `kubectl config set-context --current --namespace` | Change current namespace |
|
||||||
| kgcm | `kubectl get configmaps` | List the configmaps in ps output format |
|
| kens | `kubectl edit namespace` | Edit namespace resource from the default editor |
|
||||||
| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor |
|
| kdns | `kubectl describe namespace` | Describe namespace resource in detail |
|
||||||
| kdcm | `kubectl describe configmap` | Describe configmap resource in detail |
|
| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace |
|
||||||
| kdelcm | `kubectl delete configmap` | Delete the configmap |
|
| | | **ConfigMap management** |
|
||||||
| | | **Secret management** |
|
| kgcm | `kubectl get configmaps` | List the configmaps in ps output format |
|
||||||
| kgsec | `kubectl get secret` | Get secret for decoding |
|
| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor |
|
||||||
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
|
| kdcm | `kubectl describe configmap` | Describe configmap resource in detail |
|
||||||
| kdelsec | `kubectl delete secret` | Delete the secret |
|
| kdelcm | `kubectl delete configmap` | Delete the configmap |
|
||||||
| | | **Deployment management** |
|
| | | **Secret management** |
|
||||||
| kgd | `kubectl get deployment` | Get the deployment |
|
| kgsec | `kubectl get secret` | Get secret for decoding |
|
||||||
| kgdw | `kgd --watch` | After getting the deployment, watch for changes |
|
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
|
||||||
| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information |
|
| kdelsec | `kubectl delete secret` | Delete the secret |
|
||||||
| ked | `kubectl edit deployment` | Edit deployment resource from the default editor |
|
| | | **Deployment management** |
|
||||||
| kdd | `kubectl describe deployment` | Describe deployment resource in detail |
|
| kgd | `kubectl get deployment` | Get the deployment |
|
||||||
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
| kgdw | `kgd --watch` | After getting the deployment, watch for changes |
|
||||||
| ksd | `kubectl scale deployment` | Scale a deployment |
|
| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information |
|
||||||
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
| ked | `kubectl edit deployment` | Edit deployment resource from the default editor |
|
||||||
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
| kdd | `kubectl describe deployment` | Describe deployment resource in detail |
|
||||||
| | | **Rollout management** |
|
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
||||||
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
| ksd | `kubectl scale deployment` | Scale a deployment |
|
||||||
| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail |
|
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
||||||
| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor |
|
| krrd | `kubectl rollout restart deployment` | Rollout restart a deployment |
|
||||||
| krh | `kubectl rollout history` | Check the revisions of this deployment |
|
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
||||||
| kru | `kubectl rollout undo` | Rollback to the previous revision |
|
| | | **Rollout management** |
|
||||||
| | | **Port forwarding** |
|
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
||||||
| kpf | `kubectl port-forward` | Forward one or more local ports to a pod |
|
| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail |
|
||||||
| | | **Tools for accessing all information** |
|
| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor |
|
||||||
| kga | `kubectl get all` | List all resources in ps format |
|
| krh | `kubectl rollout history` | Check the revisions of this deployment |
|
||||||
| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces |
|
| kru | `kubectl rollout undo` | Rollback to the previous revision |
|
||||||
| | | **Logs** |
|
| | | **Port forwarding** |
|
||||||
| kl | `kubectl logs` | Print the logs for a container or resource |
|
| kpf | `kubectl port-forward` | Forward one or more local ports to a pod |
|
||||||
| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) |
|
| | | **Tools for accessing all information** |
|
||||||
| | | **File copy** |
|
| kga | `kubectl get all` | List all resources in ps format |
|
||||||
| kcp | `kubectl cp` | Copy files and directories to and from containers |
|
| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces |
|
||||||
| | | **Node management** |
|
| | | **Logs** |
|
||||||
| kgno | `kubectl get nodes` | List the nodes in ps output format |
|
| klog | `kubectl logs` | Print the logs for a container or resource |
|
||||||
| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels |
|
| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) |
|
||||||
| keno | `kubectl edit node` | Edit nodes resource from the default editor |
|
| | | **File copy** |
|
||||||
| kdno | `kubectl describe node` | Describe node resource in detail |
|
| kcp | `kubectl cp` | Copy files and directories to and from containers |
|
||||||
| kdelno | `kubectl delete node` | Delete the node |
|
| | | **Node management** |
|
||||||
| | | **Persistent Volume Claim management** |
|
| kgno | `kubectl get nodes` | List the nodes in ps output format |
|
||||||
| kgpvc | `kubectl get pvc` | List all PVCs |
|
| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels |
|
||||||
| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes |
|
| keno | `kubectl edit node` | Edit nodes resource from the default editor |
|
||||||
| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor |
|
| kdno | `kubectl describe node` | Describe node resource in detail |
|
||||||
| kdpvc | `kubectl describe pvc` | Describe all pvcs |
|
| kdelno | `kubectl delete node` | Delete the node |
|
||||||
| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments |
|
| | | **Persistent Volume Claim management** |
|
||||||
| | | **StatefulSets management** |
|
| kgpvc | `kubectl get pvc` | List all PVCs |
|
||||||
| kgss | `kubectl get statefulset` | List the statefulsets in ps format |
|
| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes |
|
||||||
| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes |
|
| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor |
|
||||||
| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information |
|
| kdpvc | `kubectl describe pvc` | Describe all pvcs |
|
||||||
| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor |
|
| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments |
|
||||||
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
| | | **StatefulSets management** |
|
||||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
| kgss | `kubectl get statefulset` | List the statefulsets in ps format |
|
||||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes |
|
||||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information |
|
||||||
| | | **Service Accounts management** |
|
| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor |
|
||||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
||||||
| kdelsa | `kubectl delete sa` | Delete the service account |
|
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||||
| | | **DaemonSet management** |
|
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||||
| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format |
|
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
||||||
| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes |
|
| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset |
|
||||||
| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor |
|
| | | **Service Accounts management** |
|
||||||
| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail |
|
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||||
| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument |
|
| kdelsa | `kubectl delete sa` | Delete the service account |
|
||||||
| | | **CronJob management** |
|
| | | **DaemonSet management** |
|
||||||
| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format |
|
| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format |
|
||||||
| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor |
|
| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes |
|
||||||
| kdcj | `kubectl describe cronjob` | Describe a CronJob in details |
|
| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor |
|
||||||
| kdelcj | `kubectl delete cronjob` | Delete the CronJob |
|
| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail |
|
||||||
| | | **Job management** |
|
| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument |
|
||||||
| kgj | `kubectl get job` | List all Job in ps output format |
|
| | | **CronJob management** |
|
||||||
| kej | `kubectl edit job` | Edit a Job in details |
|
| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format |
|
||||||
| kdj | `kubectl describe job` | Describe the Job |
|
| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor |
|
||||||
| kdelj | `kubectl delete job` | Delete the Job |
|
| kdcj | `kubectl describe cronjob` | Describe a CronJob in details |
|
||||||
|
| kdelcj | `kubectl delete cronjob` | Delete the CronJob |
|
||||||
|
| | | **Job management** |
|
||||||
|
| kgj | `kubectl get job` | List all Job in ps output format |
|
||||||
|
| kej | `kubectl edit job` | Edit a Job in details |
|
||||||
|
| kdj | `kubectl describe job` | Describe the Job |
|
||||||
|
| kdelj | `kubectl delete job` | Delete the Job |
|
||||||
|
|
||||||
## Wrappers
|
## Wrappers
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,9 @@ 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 kgew='kubectl get events --sort-by=".lastTimestamp" --watch'
|
||||||
|
|
||||||
# Pod management.
|
# Pod management.
|
||||||
alias kgp='kubectl get pods'
|
alias kgp='kubectl get pods'
|
||||||
|
|
@ -96,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)
|
||||||
|
|
@ -118,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"
|
||||||
|
|
@ -127,7 +135,7 @@ alias kga='kubectl get all'
|
||||||
alias kgaa='kubectl get all --all-namespaces'
|
alias kgaa='kubectl get all --all-namespaces'
|
||||||
|
|
||||||
# Logs
|
# Logs
|
||||||
alias kl='kubectl logs'
|
alias klog='kubectl logs'
|
||||||
alias kl1h='kubectl logs --since 1h'
|
alias kl1h='kubectl logs --since 1h'
|
||||||
alias kl1m='kubectl logs --since 1m'
|
alias kl1m='kubectl logs --since 1m'
|
||||||
alias kl1s='kubectl logs --since 1s'
|
alias kl1s='kubectl logs --since 1s'
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ plugins=(... laravel)
|
||||||
| `pamfs` | `php artisan migrate:fresh --seed` |
|
| `pamfs` | `php artisan migrate:fresh --seed` |
|
||||||
| `pamr` | `php artisan migrate:rollback` |
|
| `pamr` | `php artisan migrate:rollback` |
|
||||||
| `pads` | `php artisan db:seed` |
|
| `pads` | `php artisan db:seed` |
|
||||||
|
| `padw` | `php artisan db:wipe` |
|
||||||
|
|
||||||
## Makers
|
## Makers
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ alias pamf='php artisan migrate:fresh'
|
||||||
alias pamfs='php artisan migrate:fresh --seed'
|
alias pamfs='php artisan migrate:fresh --seed'
|
||||||
alias pamr='php artisan migrate:rollback'
|
alias pamr='php artisan migrate:rollback'
|
||||||
alias pads='php artisan db:seed'
|
alias pads='php artisan db:seed'
|
||||||
|
alias padw='php artisan db:wipe'
|
||||||
|
|
||||||
# Makers
|
# Makers
|
||||||
alias pamm='php artisan make:model'
|
alias pamm='php artisan make:model'
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ plugins=(... macos)
|
||||||
- [iTerm2](https://iterm2.com/)
|
- [iTerm2](https://iterm2.com/)
|
||||||
- [Hyper](https://hyper.is/)
|
- [Hyper](https://hyper.is/)
|
||||||
- [Tabby](https://tabby.sh/)
|
- [Tabby](https://tabby.sh/)
|
||||||
|
- [Ghostty](https://ghostty.org)
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,12 @@ EOF
|
||||||
tell application "System Events"
|
tell application "System Events"
|
||||||
tell process "Tabby" to keystroke "t" using command down
|
tell process "Tabby" to keystroke "t" using command down
|
||||||
end tell
|
end tell
|
||||||
|
EOF
|
||||||
|
elif [[ "$the_app" == 'ghostty' ]]; then
|
||||||
|
osascript >/dev/null <<EOF
|
||||||
|
tell application "System Events"
|
||||||
|
tell process "Ghostty" to keystroke "t" using command down
|
||||||
|
end tell
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
echo "$0: unsupported terminal app: $the_app" >&2
|
echo "$0: unsupported terminal app: $the_app" >&2
|
||||||
|
|
@ -139,6 +145,12 @@ EOF
|
||||||
tell application "System Events"
|
tell application "System Events"
|
||||||
tell process "Tabby" to keystroke "D" using command down
|
tell process "Tabby" to keystroke "D" using command down
|
||||||
end tell
|
end tell
|
||||||
|
EOF
|
||||||
|
elif [[ "$the_app" == 'ghostty' ]]; then
|
||||||
|
osascript >/dev/null <<EOF
|
||||||
|
tell application "System Events"
|
||||||
|
tell process "Ghostty" to keystroke "D" using command down
|
||||||
|
end tell
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
echo "$0: unsupported terminal app: $the_app" >&2
|
echo "$0: unsupported terminal app: $the_app" >&2
|
||||||
|
|
@ -194,6 +206,12 @@ EOF
|
||||||
tell application "System Events"
|
tell application "System Events"
|
||||||
tell process "Tabby" to keystroke "d" using command down
|
tell process "Tabby" to keystroke "d" using command down
|
||||||
end tell
|
end tell
|
||||||
|
EOF
|
||||||
|
elif [[ "$the_app" == 'ghostty' ]]; then
|
||||||
|
osascript >/dev/null <<EOF
|
||||||
|
tell application "System Events"
|
||||||
|
tell process "Ghostty" to keystroke "d" using command down
|
||||||
|
end tell
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
echo "$0: unsupported terminal app: $the_app" >&2
|
echo "$0: unsupported terminal app: $the_app" >&2
|
||||||
|
|
@ -253,7 +271,7 @@ function man-preview() {
|
||||||
[[ $# -eq 0 ]] && >&2 echo "Usage: $0 command1 [command2 ...]" && return 1
|
[[ $# -eq 0 ]] && >&2 echo "Usage: $0 command1 [command2 ...]" && return 1
|
||||||
|
|
||||||
local page
|
local page
|
||||||
for page in "${(@f)"$(man -w $@)"}"; do
|
for page in "${(@f)"$(command man -w $@)"}"; do
|
||||||
command mandoc -Tpdf $page | open -f -a Preview
|
command mandoc -Tpdf $page | open -f -a Preview
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
# Default commands
|
# Default commands
|
||||||
: ${MAGIC_ENTER_GIT_COMMAND:="git status -u ."} # run when in a git repository
|
: ${MAGIC_ENTER_GIT_COMMAND:="git status -u ."} # run when in a git repository
|
||||||
|
: ${MAGIC_ENTER_JJ_COMMAND:="jj st --no-pager ."} # run when in a jj repository
|
||||||
: ${MAGIC_ENTER_OTHER_COMMAND:="ls -lh ."} # run anywhere else
|
: ${MAGIC_ENTER_OTHER_COMMAND:="ls -lh ."} # run anywhere else
|
||||||
|
|
||||||
magic-enter() {
|
magic-enter() {
|
||||||
|
|
@ -9,7 +10,10 @@ magic-enter() {
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if command git rev-parse --is-inside-work-tree &>/dev/null; then
|
# needs to be before git to handle colocated repositories
|
||||||
|
if (( $+commands[jj] )) && command jj st >/dev/null 2>&1; then
|
||||||
|
BUFFER="$MAGIC_ENTER_JJ_COMMAND"
|
||||||
|
elif (( $+commands[git] )) && command git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||||
BUFFER="$MAGIC_ENTER_GIT_COMMAND"
|
BUFFER="$MAGIC_ENTER_GIT_COMMAND"
|
||||||
else
|
else
|
||||||
BUFFER="$MAGIC_ENTER_OTHER_COMMAND"
|
BUFFER="$MAGIC_ENTER_OTHER_COMMAND"
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,16 @@ case $state in
|
||||||
(help)
|
(help)
|
||||||
_arguments ':feature:__task_list'
|
_arguments ':feature:__task_list'
|
||||||
;;
|
;;
|
||||||
|
(format)
|
||||||
|
_arguments -C \
|
||||||
|
'--check-formatted' \
|
||||||
|
'--dot-formatter' \
|
||||||
|
'--dry-run' \
|
||||||
|
'--force' \
|
||||||
|
'--migrate' \
|
||||||
|
'--no-exit' \
|
||||||
|
'*::file:_files'
|
||||||
|
;;
|
||||||
(test)
|
(test)
|
||||||
_files
|
_files
|
||||||
;;
|
;;
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ if it's found, or the mvn command otherwise.
|
||||||
| `mvnct` | `mvn clean test` |
|
| `mvnct` | `mvn clean test` |
|
||||||
| `mvncv` | `mvn clean verify` |
|
| `mvncv` | `mvn clean verify` |
|
||||||
| `mvncvst` | `mvn clean verify -DskipTests` |
|
| `mvncvst` | `mvn clean verify -DskipTests` |
|
||||||
|
| `mvnv` | `mvn verify` |
|
||||||
|
| `mvnvst` | `mvn verify -DskipTests` |
|
||||||
| `mvndp` | `mvn deploy` |
|
| `mvndp` | `mvn deploy` |
|
||||||
| `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` |
|
| `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` |
|
||||||
| `mvndt` | `mvn dependency:tree` |
|
| `mvndt` | `mvn dependency:tree` |
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,8 @@ alias mvncp='mvn clean package'
|
||||||
alias mvnct='mvn clean test'
|
alias mvnct='mvn clean test'
|
||||||
alias mvncv='mvn clean verify'
|
alias mvncv='mvn clean verify'
|
||||||
alias mvncvst='mvn clean verify -DskipTests'
|
alias mvncvst='mvn clean verify -DskipTests'
|
||||||
|
alias mvnv='mvn verify'
|
||||||
|
alias mvnvst='mvn verify -DskipTests'
|
||||||
alias mvndp='mvn deploy'
|
alias mvndp='mvn deploy'
|
||||||
alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc'
|
alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc'
|
||||||
alias mvndt='mvn dependency:tree'
|
alias mvndt='mvn dependency:tree'
|
||||||
|
|
|
||||||
52
plugins/nestjs/README.md
Normal file
52
plugins/nestjs/README.md
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# NestJS Plugin for Oh My Zsh
|
||||||
|
|
||||||
|
This plugin provides aliases for common [NestJS CLI](https://docs.nestjs.com/cli/overview) commands.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- [NestJS CLI](https://docs.nestjs.com/cli/overview#installation) installed globally:
|
||||||
|
`npm install -g @nestjs/cli`
|
||||||
|
|
||||||
|
## Aliases
|
||||||
|
|
||||||
|
| Alias | Command | Description |
|
||||||
|
| :------ | :--------------------------- | :------------------------------------------ |
|
||||||
|
| `nnew` | `nest new` | Create a new NestJS project |
|
||||||
|
| `nb` | `nest build` | Build the NestJS application |
|
||||||
|
| `ns` | `nest start` | Start the application |
|
||||||
|
| `nsw` | `nest start --watch` | Start the application in watch mode |
|
||||||
|
| `nsd` | `nest start --dev` | Start the application in dev mode |
|
||||||
|
| `nsdbg` | `nest start --debug --watch` | Start the application in debug & watch mode |
|
||||||
|
| `ng` | `nest generate` | Generate a NestJS element |
|
||||||
|
| `ngm` | `nest generate module` | Generate a module |
|
||||||
|
| `ngc` | `nest generate controller` | Generate a controller |
|
||||||
|
| `ngs` | `nest generate service` | Generate a service |
|
||||||
|
| `ngg` | `nest generate guard` | Generate a guard |
|
||||||
|
| `ngp` | `nest generate pipe` | Generate a pipe |
|
||||||
|
| `ngf` | `nest generate filter` | Generate a filter |
|
||||||
|
| `ngr` | `nest generate resolver` | Generate a GraphQL resolver |
|
||||||
|
| `ngcl` | `nest generate class` | Generate a class |
|
||||||
|
| `ngi` | `nest generate interface` | Generate an interface |
|
||||||
|
| `ngit` | `nest generate interceptor` | Generate an interceptor |
|
||||||
|
| `ngmi` | `nest generate middleware` | Generate a middleware |
|
||||||
|
| `ngd` | `nest generate decorator` | Generate a custom decorator |
|
||||||
|
| `ngres` | `nest generate resource` | Generate a CRUD resource |
|
||||||
|
| `nglib` | `nest generate library` | Generate a new library |
|
||||||
|
| `ngsub` | `nest generate sub-app` | Generate a new sub-application (monorepo) |
|
||||||
|
| `na` | `nest add` | Add a library to the project |
|
||||||
|
| `ni` | `nest info` | Display NestJS project information |
|
||||||
|
| `nu` | `nest update` | Update NestJS dependencies |
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. Add `nestjs` to the `plugins` array in your `~/.zshrc` file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
plugins=(... nestjs)
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Restart your terminal or source your `~/.zshrc` file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
source ~/.zshrc
|
||||||
|
```
|
||||||
41
plugins/nestjs/nestjs.plugin.zsh
Normal file
41
plugins/nestjs/nestjs.plugin.zsh
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
# Oh My Zsh plugin for NestJS CLI
|
||||||
|
|
||||||
|
# Check if nest command exists
|
||||||
|
if ! command -v nest &>/dev/null; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Project creation
|
||||||
|
alias nnew='nest new'
|
||||||
|
|
||||||
|
# Basic development
|
||||||
|
alias nb='nest build'
|
||||||
|
alias ns='nest start'
|
||||||
|
alias nsw='nest start --watch'
|
||||||
|
alias nsd='nest start --dev' # Alias for start --watch
|
||||||
|
alias nsdbg='nest start --debug --watch'
|
||||||
|
|
||||||
|
# Code generation (short aliases)
|
||||||
|
alias ng='nest generate'
|
||||||
|
alias ngm='nest generate module'
|
||||||
|
alias ngc='nest generate controller'
|
||||||
|
alias ngs='nest generate service'
|
||||||
|
alias ngg='nest generate guard'
|
||||||
|
alias ngp='nest generate pipe'
|
||||||
|
alias ngf='nest generate filter'
|
||||||
|
alias ngr='nest generate resolver'
|
||||||
|
alias ngcl='nest generate class'
|
||||||
|
alias ngi='nest generate interface'
|
||||||
|
alias ngit='nest generate interceptor'
|
||||||
|
alias ngmi='nest generate middleware'
|
||||||
|
alias ngd='nest generate decorator'
|
||||||
|
alias ngres='nest generate resource'
|
||||||
|
alias nglib='nest generate library'
|
||||||
|
alias ngsub='nest generate sub-app'
|
||||||
|
|
||||||
|
# Other commands
|
||||||
|
alias na='nest add'
|
||||||
|
alias ni='nest info'
|
||||||
|
alias nu='nest update'
|
||||||
|
|
||||||
|
# You can add more aliases or functions here as needed.
|
||||||
|
|
@ -19,7 +19,7 @@ plugins=(... opentofu)
|
||||||
|--------|------------------------------|
|
|--------|------------------------------|
|
||||||
| `tt` | `tofu` |
|
| `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'
|
||||||
|
|
|
||||||
|
|
@ -20,17 +20,17 @@ the next time you autocomplete `pip install`.
|
||||||
|
|
||||||
## Aliases
|
## Aliases
|
||||||
|
|
||||||
| Alias | Description |
|
| Alias | Command | Description |
|
||||||
| :------- | :-------------------------------------------- |
|
| :--------|:----------------------------------------------------------------------------------|:--------------------------------------------- |
|
||||||
| pipi | Install packages |
|
| pipi | `pip install` | Install packages |
|
||||||
| pipig | Install package from GitHub repository |
|
| pipig | `pip install "git+https://github.com/user/repo.git"` | Install package from GitHub repository |
|
||||||
| pipigb | Install package from GitHub branch |
|
| pipigb | `pip install "git+https://github.com/user/repo.git@branch"` | Install package from GitHub branch |
|
||||||
| pipigp | Install package from GitHub pull request |
|
| pipigp | `pip install "git+https://github.com/user/repo.git@refs/pull/PR_NUMBER/head"` | Install package from GitHub pull request |
|
||||||
| pipu | Upgrade packages |
|
| pipu | `pip install --upgrade` | Upgrade packages |
|
||||||
| pipun | Uninstall packages |
|
| pipun | `pip uninstall` | Uninstall packages |
|
||||||
| pipgi | Grep through installed packages |
|
| pipgi | `pip freeze \| grep` | Grep through installed packages |
|
||||||
| piplo | List outdated packages |
|
| piplo | `pip list --outdated` | List outdated packages |
|
||||||
| pipreq | Create requirements file |
|
| pipreq | `pip freeze > requirements.txt` | Create requirements file |
|
||||||
| pipir | Install packages from `requirements.txt` file |
|
| pipir | `pip install -r requirements.txt` | Install packages from `requirements.txt` file |
|
||||||
| pipupall | Update all installed packages |
|
| pipupall | `pip list --outdated \| awk 'NR > 2 { print $1 }' \| xargs pip install --upgrade` | Update all installed packages |
|
||||||
| pipunall | Uninstall all installed packages |
|
| pipunall | `pip list --format freeze \| cut -d= -f1 \| xargs pip uninstall` | Uninstall all installed packages |
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
_togglePoetryShell() {
|
_togglePoetryShell() {
|
||||||
# Determine if currently in a Poetry-managed directory
|
# Determine if currently in a Poetry-managed directory
|
||||||
local in_poetry_dir=0
|
local in_poetry_dir=0
|
||||||
if [[ -f "$PWD/pyproject.toml" ]] && grep -q 'tool.poetry' "$PWD/pyproject.toml"; then
|
if [[ -f "$PWD/pyproject.toml" && -f "$PWD/poetry.lock" ]]; then
|
||||||
in_poetry_dir=1
|
in_poetry_dir=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,19 @@ if (( ! $+commands[procs] )); then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If the completion file doesn't exist yet, we need to autoload it and
|
# If the completion file doesn't exist yet, we need to autoload it and
|
||||||
# bind it to `minikube`. Otherwise, compinit will have already done that.
|
# bind it to `procs`. Otherwise, compinit will have already done that.
|
||||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_procs" ]]; then
|
if [[ ! -f "$ZSH_CACHE_DIR/completions/_procs" ]]; then
|
||||||
typeset -g -A _comps
|
typeset -g -A _comps
|
||||||
autoload -Uz _procs
|
autoload -Uz _procs
|
||||||
_comps[procs]=_procs
|
_comps[procs]=_procs
|
||||||
fi
|
fi
|
||||||
|
|
||||||
procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" &|
|
{
|
||||||
|
autoload -Uz is-at-least
|
||||||
|
local _version=$(procs --version)
|
||||||
|
if is-at-least "0.14" "${_version#procs }"; then
|
||||||
|
procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
|
||||||
|
else
|
||||||
|
procs --completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
|
||||||
|
fi
|
||||||
|
} &|
|
||||||
|
|
|
||||||
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'
|
||||||
|
|
@ -34,7 +34,7 @@ virtual environments:
|
||||||
`<venv-name>/bin/activate`, and automatically deactivate it when navigating out of it (keeps venv activated
|
`<venv-name>/bin/activate`, and automatically deactivate it when navigating out of it (keeps venv activated
|
||||||
in subdirectories).
|
in subdirectories).
|
||||||
- To enable the feature, set `PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh.
|
- To enable the feature, set `PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh.
|
||||||
- The plugin activates the first existing virtual environment, in order, appearing in `$PYTON_VENV_NAMES`.
|
- The plugin activates the first existing virtual environment, in order, appearing in `$PYTHON_VENV_NAMES`.
|
||||||
The default virtual environment name is `venv`. To use a different name, set
|
The default virtual environment name is `venv`. To use a different name, set
|
||||||
`PYTHON_VENV_NAME=<venv-name>`. For example: `PYTHON_VENV_NAME=".venv"`
|
`PYTHON_VENV_NAME=<venv-name>`. For example: `PYTHON_VENV_NAME=".venv"`
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ function quote {
|
||||||
|
|
||||||
# Get random quote data
|
# Get random quote data
|
||||||
local data
|
local data
|
||||||
data="$(command curl -s --connect-timeout 2 "http://www.quotationspage.com/random.php" \
|
data="$(command curl -s --connect-timeout 2 "https://www.quotationspage.com/random.php" \
|
||||||
| iconv -c -f ISO-8859-1 -t UTF-8 \
|
| iconv -c -f ISO-8859-1 -t UTF-8 \
|
||||||
| command grep -a -m 1 'dt class="quote"')"
|
| command grep -a -m 1 'dt class="quote"')"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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/%/%%}" }
|
|
||||||
|
|
@ -29,9 +29,24 @@ function rbwpw {
|
||||||
echo "$service not found"
|
echo "$service not found"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Generate a random identifier for this call to rbwpw
|
||||||
|
# so we can check if the clipboard content has changed
|
||||||
|
local _random="$RANDOM" _cache="$ZSH_CACHE_DIR/.rbwpw"
|
||||||
|
echo -n "$_random" > "$_cache"
|
||||||
|
|
||||||
|
# Use clipcopy to copy the password to the clipboard
|
||||||
echo -n $pw | clipcopy
|
echo -n $pw | clipcopy
|
||||||
echo "password for $service copied!"
|
echo "password for $service copied!"
|
||||||
{sleep 20 && clipcopy </dev/null 2>/dev/null} &|
|
|
||||||
|
# Clear the clipboard after 20 seconds, but only if the clipboard hasn't
|
||||||
|
# changed (if rbwpw hasn't been called again)
|
||||||
|
{
|
||||||
|
sleep 20 \
|
||||||
|
&& [[ "$(<"$_cache")" == "$_random" ]] \
|
||||||
|
&& clipcopy </dev/null 2>/dev/null \
|
||||||
|
&& command rm -f "$_cache" &>/dev/null
|
||||||
|
} &|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _rbwpw {
|
function _rbwpw {
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,8 @@ _repo()
|
||||||
"(--autosquash)--no-ff[Pass --autosquash to git rebase]"\
|
"(--autosquash)--no-ff[Pass --autosquash to git rebase]"\
|
||||||
"(--whitespace=)--whitespace=[Pass --whitespace to git rebase]: :__git_apply_whitespace_strategies"\
|
"(--whitespace=)--whitespace=[Pass --whitespace to git rebase]: :__git_apply_whitespace_strategies"\
|
||||||
"(--auto-stash)--auto-stash[Stash local modifications before starting]"\
|
"(--auto-stash)--auto-stash[Stash local modifications before starting]"\
|
||||||
|
"(--update-refs)--update-refs[Automatically force-update any branches that point to commits that are being rebased.]"\
|
||||||
|
"(--no-update-refs)--no-update-refs[Turn off the automatic force-update of any branches that point to commits that are being rebased.]"\
|
||||||
&& ret=0
|
&& ret=0
|
||||||
;;
|
;;
|
||||||
(checkout)
|
(checkout)
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,26 @@
|
||||||
# rsync
|
# rsync
|
||||||
|
|
||||||
This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands.
|
This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands, simplifying file transfer and synchronization tasks.
|
||||||
|
|
||||||
To use it add `rsync` to the plugins array in you zshrc file.
|
To use it add `rsync` to the plugins array in you `.zshrc` file.
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
plugins=(... rsync)
|
plugins=(... rsync)
|
||||||
```
|
```
|
||||||
|
|
||||||
| Alias | Command |
|
| Alias | Command | Description |
|
||||||
| ------------------- | ------------------------------------------------ |
|
| ------------------- | ------------------------------------------------ | ------------|
|
||||||
| *rsync-copy* | `rsync -avz --progress -h` |
|
| `rsync-copy` | `rsync -avz --progress -h` | Recursively copy files and directories, preserving permissions, timestamps, and symbolic links. Compression is enabled for faster transfers. Progress is displayed in a human-readable format. |
|
||||||
| *rsync-move* | `rsync -avz --progress -h --remove-source-files` |
|
| `rsync-move` | `rsync -avz --progress -h --remove-source-files` | Same as rsync-copy, but removes the source files after a successful transfer (effectively performing a move). |
|
||||||
| *rsync-update* | `rsync -avzu --progress -h` |
|
| `rsync-update` | `rsync -avzu --progress -h` | Like rsync-copy, but only updates files if the source is newer than the destination (or if the destination file is missing). |
|
||||||
| *rsync-synchronize* | `rsync -avzu --delete --progress -h` |
|
| `rsync-synchronize` | `rsync -avzu --delete --progress -h` | Performs bidirectional-style sync: updates files as in rsync-update and deletes files in the destination that no longer exist in the source. Useful for directory synchronization. |
|
||||||
|
|
||||||
|
Explanation of Flags:
|
||||||
|
- -a: Archive mode; preserves symbolic links, permissions, timestamps, etc.
|
||||||
|
- -v: Verbose; shows details of the transfer process.
|
||||||
|
- -z: Compress file data during transfer for efficiency.
|
||||||
|
- -u: Skip files that are newer on the receiver.
|
||||||
|
- --progress: Show progress during file transfer.
|
||||||
|
- -h: Output numbers in human-readable format (e.g., 1K, 234M).
|
||||||
|
- --remove-source-files: Deletes source files after they are copied (used in rsync-move).
|
||||||
|
- --delete: Deletes files in the destination that are not present in the source (used in rsync-synchronize).
|
||||||
|
|
|
||||||
17
plugins/spackenv/README.md
Normal file
17
plugins/spackenv/README.md
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# spackenv
|
||||||
|
|
||||||
|
Based on the virtualenv plugin.
|
||||||
|
|
||||||
|
The plugin displays information of the created Spack environment and allows background theming.
|
||||||
|
|
||||||
|
To use it, add `spackenv` to the plugins array of your zshrc file:
|
||||||
|
```
|
||||||
|
plugins=(... spackenv)
|
||||||
|
```
|
||||||
|
|
||||||
|
The plugin creates a `spackenv_prompt_info` function that you can use in your theme, which displays
|
||||||
|
the basename of the current `$SPACK_ENV`. It uses two variables to control how that is shown:
|
||||||
|
|
||||||
|
- `ZSH_THEME_SPACKENV_PREFIX`: sets the prefix of the SPACK_ENV. Defaults to `[`.
|
||||||
|
|
||||||
|
- `ZSH_THEME_SPACKENV_SUFFIX`: sets the suffix of the SPACK_ENV. Defaults to `]`.
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue