mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-07 21:18:01 +08:00
Compare commits
8 Commits
9ac88cc53d
...
4d17eba92a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d17eba92a | ||
|
|
72acd2ca90 | ||
|
|
ddec79ad43 | ||
|
|
0ebeae78d0 | ||
|
|
3b66f643e4 | ||
|
|
953f526dea | ||
|
|
0c733b810a | ||
|
|
316882dcc1 |
6
.github/workflows/dependencies.yml
vendored
6
.github/workflows/dependencies.yml
vendored
@ -13,17 +13,17 @@ jobs:
|
||||
contents: write # this is needed to push commits and branches
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Authenticate as @ohmyzsh
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0
|
||||
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
|
||||
with:
|
||||
app-id: ${{ secrets.OHMYZSH_APP_ID }}
|
||||
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
||||
|
||||
8
.github/workflows/installer.yml
vendored
8
.github/workflows/installer.yml
vendored
@ -26,12 +26,12 @@ jobs:
|
||||
- macos-latest
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
- name: Install zsh
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get update; sudo apt-get install zsh
|
||||
@ -47,12 +47,12 @@ jobs:
|
||||
- test
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
- name: Install Vercel CLI
|
||||
run: npm install -g vercel
|
||||
- name: Setup project and deploy
|
||||
|
||||
4
.github/workflows/main.yml
vendored
4
.github/workflows/main.yml
vendored
@ -24,12 +24,12 @@ jobs:
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
- name: Install zsh
|
||||
run: sudo apt-get update; sudo apt-get install zsh
|
||||
- name: Check syntax
|
||||
|
||||
4
.github/workflows/project.yml
vendored
4
.github/workflows/project.yml
vendored
@ -17,12 +17,12 @@ jobs:
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
with:
|
||||
egress-policy: audit
|
||||
- name: Authenticate as @ohmyzsh
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0
|
||||
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
|
||||
with:
|
||||
app-id: ${{ secrets.OHMYZSH_APP_ID }}
|
||||
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
||||
|
||||
6
.github/workflows/scorecard.yml
vendored
6
.github/workflows/scorecard.yml
vendored
@ -36,12 +36,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: "Checkout code"
|
||||
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@ -60,6 +60,6 @@ jobs:
|
||||
retention-days: 5
|
||||
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
||||
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
93
plugins/glab/README.md
Normal file
93
plugins/glab/README.md
Normal file
@ -0,0 +1,93 @@
|
||||
# glab plugin
|
||||
|
||||
This plugin adds support for the [GitLab CLI (`glab`)](https://gitlab.com/gitlab-org/cli), a tool to interact with GitLab from the terminal.
|
||||
|
||||
## Features
|
||||
|
||||
- **Shell completion**: enables `zsh` completions for `glab` automatically if it is installed.
|
||||
- **Environment setup**: loads `GITLAB_HOST` and `GITLAB_TOKEN` from `~/.netrc` if they are not already set.
|
||||
- **Aliases**: provides convenient shortcuts for common GitLab CLI commands.
|
||||
- **Helper functions**: adds extra functions for common GitLab workflows, including merge requests, issues, CI/CD pipelines, repositories, and releases.
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
|------------ |------------------ |-------------------------------- |
|
||||
| `gl` | `glab` | Shortcut for `glab` |
|
||||
| `glmr` | `glab mr` | Manage merge requests |
|
||||
| `glissue` | `glab issue` | Manage issues |
|
||||
| `glrepo` | `glab repo` | Manage repositories |
|
||||
| `glci` | `glab ci` | Manage CI pipelines |
|
||||
| `glprj` | `glab project` | Manage projects |
|
||||
| `glrelease` | `glab release` | Manage releases |
|
||||
|
||||
## Helper functions
|
||||
|
||||
### Merge Requests
|
||||
- `glmr-open [<MR>]`
|
||||
Opens a merge request in the browser. If `<MR>` is not specified, opens the current branch MR.
|
||||
|
||||
- `glmr-checkout <MR>`
|
||||
Checks out the merge request branch locally.
|
||||
|
||||
- `glmr-merge <MR>`
|
||||
Merges a merge request and optionally removes the source branch.
|
||||
|
||||
- `glmr-list [<args>]`
|
||||
Lists merge requests assigned to you. Additional `glab mr list` arguments can be passed.
|
||||
|
||||
### Issues
|
||||
- `glissue-new [<title>]`
|
||||
Creates a new issue. If a title is provided, it is used; otherwise an interactive prompt is opened.
|
||||
|
||||
- `glissue-close <issue>`
|
||||
Closes the specified issue.
|
||||
|
||||
- `glissue-list [<args>]`
|
||||
Lists open issues assigned to you. Additional `glab issue list` arguments can be passed.
|
||||
|
||||
### CI/CD
|
||||
- `glci-status [<args>]`
|
||||
Opens the current CI pipeline status in the browser.
|
||||
|
||||
- `glci-retry <pipeline>`
|
||||
Retries the specified pipeline.
|
||||
|
||||
- `glci-latest`
|
||||
Shows the latest pipeline.
|
||||
|
||||
### Repositories
|
||||
- `glrepo-clone <project>`
|
||||
Clones a repository.
|
||||
|
||||
- `glrepo-list [<args>]`
|
||||
Lists all repositories you are a member of.
|
||||
|
||||
- `glrepo-open <project>`
|
||||
Opens a repository in the browser.
|
||||
|
||||
- `glrepo-starred [<args>]`
|
||||
Lists your starred repositories.
|
||||
|
||||
### Releases
|
||||
- `glrelease-create "<title>" "<tag>"`
|
||||
Creates a new release with the given title and tag.
|
||||
|
||||
### Search
|
||||
- `glsearch <keyword>`
|
||||
Searches for merge requests and issues matching the keyword.
|
||||
|
||||
## Environment variables
|
||||
|
||||
The plugin attempts to set the following variables if they are not already defined:
|
||||
|
||||
- `GITLAB_HOST` — taken from the first `machine` entry in `~/.netrc`.
|
||||
- `GITLAB_TOKEN` — the corresponding `password` from `~/.netrc`.
|
||||
|
||||
## Usage
|
||||
|
||||
1. Install [`glab`](https://gitlab.com/gitlab-org/cli#installation).
|
||||
2. Enable the plugin in your `.zshrc`:
|
||||
|
||||
```zsh
|
||||
plugins=(git glab)
|
||||
145
plugins/glab/glab.plugin.zsh
Normal file
145
plugins/glab/glab.plugin.zsh
Normal file
@ -0,0 +1,145 @@
|
||||
# Oh My Zsh plugin for GitLab CLI (glab)
|
||||
|
||||
# --- Environment setup ---
|
||||
# Load GITLAB_HOST and GITLAB_TOKEN from ~/.netrc if not already set
|
||||
if [ -z "$GITLAB_HOST" ] || [ -z "$GITLAB_TOKEN" ]; then
|
||||
if [ -f "$HOME/.netrc" ]; then
|
||||
__glab_machine=$(awk '/^machine/{print $2; exit}' "$HOME/.netrc")
|
||||
__glab_pass=$(awk -v host="$__glab_machine" '$2==host{getline; getline; if($1=="password") print $2}' "$HOME/.netrc")
|
||||
|
||||
if [ -n "$__glab_machine" ] && [ -n "$__glab_pass" ]; then
|
||||
export GITLAB_HOST="$__glab_machine"
|
||||
export GITLAB_TOKEN="$__glab_pass"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
unset __glab_machine __glab_pass
|
||||
|
||||
# --- Completions ---
|
||||
if command -v glab >/dev/null 2>&1; then
|
||||
eval "$(glab completion -s zsh 2>/dev/null || true)"
|
||||
fi
|
||||
|
||||
# --- Aliases ---
|
||||
alias gl='glab'
|
||||
alias glmr='glab mr'
|
||||
alias glissue='glab issue'
|
||||
alias glrepo='glab repo'
|
||||
alias glci='glab ci'
|
||||
alias glprj='glab project'
|
||||
alias glrelease='glab release'
|
||||
|
||||
# --- Merge Request Helper Functions ---
|
||||
|
||||
# Open a merge request in browser
|
||||
glmr-open() {
|
||||
glab mr view --web "$@"
|
||||
}
|
||||
|
||||
# Checkout a merge request branch locally
|
||||
glmr-checkout() {
|
||||
glab mr checkout "$1"
|
||||
}
|
||||
|
||||
# Merge a merge request
|
||||
glmr-merge() {
|
||||
glab mr merge "$1" --remove-source-branch
|
||||
}
|
||||
|
||||
# List merge requests assigned to me
|
||||
glmr-list() {
|
||||
glab mr list --assignee "@me" "$@"
|
||||
}
|
||||
|
||||
# --- Issue Helper Functions ---
|
||||
|
||||
# Create a new issue with optional title
|
||||
glissue-new() {
|
||||
if [ $# -eq 0 ]; then
|
||||
glab issue create
|
||||
else
|
||||
glab issue create -t "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
# Close an issue
|
||||
glissue-close() {
|
||||
glab issue close "$1"
|
||||
}
|
||||
|
||||
# List open issues assigned to me
|
||||
glissue-list() {
|
||||
glab issue list --assignee "@me" "$@"
|
||||
}
|
||||
|
||||
# --- CI/CD Helper Functions ---
|
||||
|
||||
# Show current CI pipeline status in browser
|
||||
glci-status() {
|
||||
glab ci view --web "$@"
|
||||
}
|
||||
|
||||
# Retry a pipeline
|
||||
glci-retry() {
|
||||
glab ci retry "$1"
|
||||
}
|
||||
|
||||
# View the latest pipeline
|
||||
glci-latest() {
|
||||
latest_id=$(glab ci list --limit 1 --json id -q '.[0].id')
|
||||
glab ci view "$latest_id"
|
||||
}
|
||||
|
||||
# --- Repository Helper Functions ---
|
||||
|
||||
# Clone a project
|
||||
glrepo-clone() {
|
||||
glab repo clone "$1"
|
||||
}
|
||||
|
||||
# List all projects I’m a member of
|
||||
glrepo-list() {
|
||||
glab repo list "$@"
|
||||
}
|
||||
|
||||
# Open a repository in browser
|
||||
glrepo-open() {
|
||||
glab repo view --web "$@"
|
||||
}
|
||||
|
||||
# List starred projects
|
||||
glrepo-starred() {
|
||||
glab repo list --starred "$@"
|
||||
}
|
||||
|
||||
# --- Release Helper Functions ---
|
||||
|
||||
# Create a release: glrelease-create "Title" "Tag"
|
||||
glrelease-create() {
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: glrelease-create <tag> [release name]"
|
||||
return 1
|
||||
fi
|
||||
local tag="$1"
|
||||
local name="${2:-$1}" # Use tag as name if no name provided
|
||||
glab release create "$tag" --name "$name"
|
||||
}
|
||||
|
||||
|
||||
# --- Search Helper Function ---
|
||||
|
||||
# Search merge requests and issues
|
||||
glsearch() {
|
||||
echo "Merge Requests:"
|
||||
glab mr list --search "$1"
|
||||
echo ""
|
||||
echo "Issues:"
|
||||
glab issue list --search "$1"
|
||||
}
|
||||
|
||||
# --- Optional Auto-completion for Custom Commands ---
|
||||
# Example: completion for glmr-open
|
||||
_glmr_open_completion() {
|
||||
_arguments "1:merge-request ID:_glab_mr"
|
||||
}
|
||||
compdef _glmr_open_completion glmr-open
|
||||
@ -1,6 +1,7 @@
|
||||
# uv plugin
|
||||
|
||||
This plugin automatically installs [uv](https://github.com/astral-sh/uv)'s completions for you, and keeps them up to date. It also adds convenient aliases for common usage.
|
||||
This plugin automatically installs [uv](https://github.com/astral-sh/uv)'s completions for you,
|
||||
and keeps them up to date. It also adds convenient aliases for common usage.
|
||||
|
||||
To use it, add `uv` to the plugins array in your zshrc file:
|
||||
|
||||
@ -10,20 +11,26 @@ plugins=(... uv)
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
|:----- |------------------------------------------------------------------------ |:-------------------------------------------------------------------- |
|
||||
| uva | `uv add` | Add packages to the project |
|
||||
| uvexp | `uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet` | Export the lock file to `requirements.txt` |
|
||||
| uvl | `uv lock` | Lock the dependencies |
|
||||
| uvlr | `uv lock --refresh` | Rebuild the lock file without upgrading dependencies |
|
||||
| uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions |
|
||||
| uvp | `uv pip` | Manage pip packages |
|
||||
| uvpy | `uv python` | Manage Python installs |
|
||||
| uvpp | `uv python pin` | Pin the current project to use a specific Python version |
|
||||
| uvr | `uv run` | Run commands within the project's environment |
|
||||
| uvrm | `uv remove` | Remove packages from the project |
|
||||
| uvs | `uv sync` | Sync the environment with the lock file |
|
||||
| uvsr | `uv sync --refresh` | "Force" sync the environment with the lock file (ignore cache) |
|
||||
| uvsu | `uv sync --upgrade` | Sync the environment, allowing upgrades and ignoring the lock file |
|
||||
| uvup | `uv self update` | Update the UV tool to the latest version |
|
||||
| uvv | `uv venv` | Manage virtual environments |
|
||||
| Alias | Command | Description |
|
||||
| :---- | ---------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- |
|
||||
| uva | `uv add` | Add packages to the project |
|
||||
| uvexp | `uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet` | Export the lock file to `requirements.txt` |
|
||||
| uvi | `uv init` | Initialize a new project in current workspace and environment. |
|
||||
| uvinw | `uv init --no-workspace` | Initialize a new project in a new workspace and environment |
|
||||
| uvl | `uv lock` | Lock the dependencies |
|
||||
| uvlr | `uv lock --refresh` | Rebuild the lock file without upgrading dependencies |
|
||||
| uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions |
|
||||
| uvp | `uv pip` | Manage pip packages |
|
||||
| uvpi | `uv python install` | Install a specific version of python |
|
||||
| uvpl | `uv python list` | Lists all python version installed |
|
||||
| uvpp | `uv python pin` | Pin the current project to use a specific Python version |
|
||||
| uvpu | `uv python uninstall` | Remove a specific version of python |
|
||||
| uvpy | `uv python` | Manage Python installs |
|
||||
| uvr | `uv run` | Run commands within the project's environment |
|
||||
| uvrm | `uv remove` | Remove packages from the project |
|
||||
| uvs | `uv sync` | Sync the environment with the lock file |
|
||||
| uvsr | `uv sync --refresh` | "Force" sync the environment with the lock file (ignore cache) |
|
||||
| uvsu | `uv sync --upgrade` | Sync the environment, allowing upgrades and ignoring the lock file |
|
||||
| uvtr | `uv tree` | Displays the full dependency tree for the current project environment |
|
||||
| uvup | `uv self update` | Update the UV tool to the latest version |
|
||||
| uvv | `uv venv` | Manage virtual environments |
|
||||
|
||||
@ -7,10 +7,15 @@ alias uv="noglob uv"
|
||||
|
||||
alias uva='uv add'
|
||||
alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet'
|
||||
alias uvi='uv init'
|
||||
alias uvinw='uv init --no-workspace'
|
||||
alias uvl='uv lock'
|
||||
alias uvlr='uv lock --refresh'
|
||||
alias uvlu='uv lock --upgrade'
|
||||
alias uvp='uv pip'
|
||||
alias uvpi='uv python install'
|
||||
alias uvpl='uv python list'
|
||||
alias uvpu='uv python uninstall'
|
||||
alias uvpy='uv python'
|
||||
alias uvpp='uv python pin'
|
||||
alias uvr='uv run'
|
||||
@ -18,6 +23,7 @@ alias uvrm='uv remove'
|
||||
alias uvs='uv sync'
|
||||
alias uvsr='uv sync --refresh'
|
||||
alias uvsu='uv sync --upgrade'
|
||||
alias uvtr='uv tree'
|
||||
alias uvup='uv self update'
|
||||
alias uvv='uv venv'
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user