mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2025-12-15 16:23:15 +08:00
Compare commits
9 Commits
773c8feb38
...
db13b32e76
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db13b32e76 | ||
|
|
72acd2ca90 | ||
|
|
ddec79ad43 | ||
|
|
0ebeae78d0 | ||
|
|
3b66f643e4 | ||
|
|
953f526dea | ||
|
|
3069f2327e | ||
|
|
913414b3fd | ||
|
|
2ce9a1bfc7 |
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
|
||||
|
||||
@ -35,6 +35,9 @@ plugins=(... aws)
|
||||
|
||||
* `aws_change_access_key`: changes the AWS access key of a profile.
|
||||
|
||||
* `aws_cost`: displays a quick overview of AWS costs including current month spending,
|
||||
cost breakdown by service, and comparison with previous periods.
|
||||
|
||||
* `aws_profiles`: lists the available profiles in the `$AWS_CONFIG_FILE` (default: `~/.aws/config`).
|
||||
Used to provide completion for the `asp` function.
|
||||
|
||||
|
||||
@ -221,6 +221,137 @@ function aws_change_access_key() {
|
||||
aws --no-cli-pager iam list-access-keys
|
||||
}
|
||||
|
||||
function aws_cost() {
|
||||
# Check if AWS CLI is available
|
||||
if ! command -v aws &> /dev/null; then
|
||||
echo "${fg[red]}AWS CLI not found. Please install AWS CLI v2.${reset_color}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get current account ID
|
||||
local account_id
|
||||
account_id=$(aws sts get-caller-identity --query Account --output text 2>/dev/null)
|
||||
if [[ -z "$account_id" ]]; then
|
||||
echo "${fg[red]}Unable to get AWS account information. Please check your credentials.${reset_color}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get current region
|
||||
local region="${AWS_REGION:-${AWS_DEFAULT_REGION:-us-east-1}}"
|
||||
|
||||
echo "AWS Cost Overview - Account: $account_id ($region)"
|
||||
echo ""
|
||||
|
||||
# Get current date and calculate date ranges
|
||||
local today=$(date +%Y-%m-%d)
|
||||
local yesterday=$(date -d "yesterday" +%Y-%m-%d 2>/dev/null || date -v-1d +%Y-%m-%d 2>/dev/null || echo "")
|
||||
local week_ago=$(date -d "7 days ago" +%Y-%m-%d 2>/dev/null || date -v-7d +%Y-%m-%d 2>/dev/null || echo "")
|
||||
local month_start=$(date +%Y-%m-01)
|
||||
local last_month_start=$(date -d "last month" +%Y-%m-01 2>/dev/null || date -v-1m +%Y-%m-01 2>/dev/null || echo "")
|
||||
local last_month_end=$(date -d "last month" +%Y-%m-%d 2>/dev/null || date -v-1m +%Y-%m-%d 2>/dev/null || echo "")
|
||||
|
||||
# Function to get cost for a date range
|
||||
local get_cost() {
|
||||
local start_date="$1"
|
||||
local end_date="$2"
|
||||
local granularity="${3:-DAILY}"
|
||||
|
||||
aws ce get-cost-and-usage \
|
||||
--time-period Start="$start_date",End="$end_date" \
|
||||
--granularity "$granularity" \
|
||||
--metrics BlendedCost \
|
||||
--query 'ResultsByTime[0].Total.BlendedCost.Amount' \
|
||||
--output text 2>/dev/null || echo "0.00"
|
||||
}
|
||||
|
||||
# Function to get cost by service for current month
|
||||
local get_cost_by_service() {
|
||||
aws ce get-cost-and-usage \
|
||||
--time-period Start="$month_start",End="$today" \
|
||||
--granularity MONTHLY \
|
||||
--metrics BlendedCost \
|
||||
--group-by Type=DIMENSION,Key=SERVICE \
|
||||
--query 'ResultsByTime[0].Groups[?Metrics.BlendedCost.Amount!=`0`] | sort_by(@, &to_number(Metrics.BlendedCost.Amount)) | reverse(@) | [0:5] | [].[Keys[0],Metrics.BlendedCost.Amount]' \
|
||||
--output text 2>/dev/null || echo ""
|
||||
}
|
||||
|
||||
# Get costs for different periods
|
||||
local yesterday_cost="0.00"
|
||||
local week_cost="0.00"
|
||||
local month_cost="0.00"
|
||||
local last_month_cost="0.00"
|
||||
|
||||
if [[ -n "$yesterday" ]]; then
|
||||
yesterday_cost=$(get_cost "$yesterday" "$yesterday")
|
||||
fi
|
||||
|
||||
if [[ -n "$week_ago" ]]; then
|
||||
week_cost=$(get_cost "$week_ago" "$today")
|
||||
fi
|
||||
|
||||
month_cost=$(get_cost "$month_start" "$today" "MONTHLY")
|
||||
|
||||
if [[ -n "$last_month_start" && -n "$last_month_end" ]]; then
|
||||
last_month_cost=$(get_cost "$last_month_start" "$last_month_end" "MONTHLY")
|
||||
fi
|
||||
|
||||
# Calculate changes
|
||||
local month_change="0.00"
|
||||
if [[ "$last_month_cost" != "0.00" && "$month_cost" != "0.00" ]]; then
|
||||
month_change=$(echo "$month_cost - $last_month_cost" | bc -l 2>/dev/null || echo "0.00")
|
||||
fi
|
||||
|
||||
# Display cost summary table
|
||||
echo "📊 CURRENT COSTS"
|
||||
echo "┌─────────────┬─────────────┬─────────────┐"
|
||||
echo "│ Period │ Amount │ Change │"
|
||||
echo "├─────────────┼─────────────┼─────────────┤"
|
||||
|
||||
if [[ -n "$yesterday" ]]; then
|
||||
printf "│ Yesterday │ $%8s │ - │\n" "$yesterday_cost"
|
||||
fi
|
||||
|
||||
if [[ -n "$week_ago" ]]; then
|
||||
printf "│ Last 7 days │ $%8s │ - │\n" "$week_cost"
|
||||
fi
|
||||
|
||||
printf "│ This month │ $%8s │ $%+8s │\n" "$month_cost" "$month_change"
|
||||
|
||||
if [[ -n "$last_month_start" && -n "$last_month_end" ]]; then
|
||||
printf "│ Last month │ $%8s │ - │\n" "$last_month_cost"
|
||||
fi
|
||||
|
||||
echo "└─────────────┴─────────────┴─────────────┘"
|
||||
echo ""
|
||||
|
||||
# Get and display top services
|
||||
echo "️ TOP SERVICES (This Month)"
|
||||
echo "┌─────────────────┬─────────────┬─────────────┐"
|
||||
echo "│ Service │ Cost │ % of Total │"
|
||||
echo "├─────────────────┼─────────────┼─────────────┤"
|
||||
|
||||
local services_data
|
||||
services_data=$(get_cost_by_service)
|
||||
|
||||
if [[ -n "$services_data" ]]; then
|
||||
local total_month_cost_num=$(echo "$month_cost" | bc -l 2>/dev/null || echo "0")
|
||||
|
||||
echo "$services_data" | while read -r service cost; do
|
||||
if [[ -n "$service" && -n "$cost" ]]; then
|
||||
local percentage="0.0"
|
||||
if [[ "$total_month_cost_num" != "0" ]]; then
|
||||
percentage=$(echo "scale=1; $cost * 100 / $total_month_cost_num" | bc -l 2>/dev/null || echo "0.0")
|
||||
fi
|
||||
printf "│ %-15s │ $%8s │ %6s%% │\n" "$service" "$cost" "$percentage"
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "│ No data available │ - │ - │"
|
||||
fi
|
||||
|
||||
echo "└─────────────────┴─────────────┴─────────────┘"
|
||||
}
|
||||
|
||||
function aws_regions() {
|
||||
local region
|
||||
if [[ $AWS_DEFAULT_REGION ]];then
|
||||
|
||||
@ -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