From 6198cdb0e100ffcbf2261d81e4c525177d634860 Mon Sep 17 00:00:00 2001 From: Esteban Vincent <73063856+EstebanVincent@users.noreply.github.com> Date: Tue, 19 May 2026 14:57:38 +0200 Subject: [PATCH] refactor: migrate all scripts and utils from bash to zsh (#3) --- README.md | 24 +++++++++---------- envs/.env.template | 2 +- scripts/{base64.sh => base64.zsh} | 2 +- .../{get_graph_user.sh => get_graph_user.zsh} | 6 ++--- scripts/{imgflip-meme.sh => imgflip-meme.zsh} | 4 ++-- scripts/{ipv4-get.sh => ipv4-get.zsh} | 2 +- ...no-as-a-service.sh => no-as-a-service.zsh} | 2 +- scripts/{x.sh => x.zsh} | 2 +- utils.sh => utils.zsh | 12 +++++----- 9 files changed, 28 insertions(+), 28 deletions(-) rename scripts/{base64.sh => base64.zsh} (99%) rename scripts/{get_graph_user.sh => get_graph_user.zsh} (97%) rename scripts/{imgflip-meme.sh => imgflip-meme.zsh} (96%) rename scripts/{ipv4-get.sh => ipv4-get.zsh} (96%) rename scripts/{no-as-a-service.sh => no-as-a-service.zsh} (97%) rename scripts/{x.sh => x.zsh} (95%) rename utils.sh => utils.zsh (84%) diff --git a/README.md b/README.md index 2f91bc4..a857af4 100644 --- a/README.md +++ b/README.md @@ -7,23 +7,23 @@ Personal [Raycast](https://raycast.com) script collection. ``` scripts/ # Raycast script commands envs/ # Per-script .env files (gitignored) -utils.sh # Shared helper: load_env +utils.zsh # Shared helper: load_env ``` ## Scripts -| Script | Icon | Description | -| -------------------- | ---- | ------------------------------------------------------ | -| `base64.sh` | 🔡 | Encode/decode base64 — text, file path, or clipboard | -| `get_graph_user.sh` | 👤 | Fetch MS Graph user info by ID or UPN | -| `imgflip-meme.sh` | 🖼️ | Generate a meme via imgflip webhook, copy to clipboard | -| `ipv4-get.sh` | 🌐 | Copy public IPv4 to clipboard | -| `no-as-a-service.sh` | ❌ | Random rejection reason from No-as-a-Service | -| `x.sh` | 🤖 | Copy Bruno ✕ character to clipboard | +| Script | Icon | Description | +| --------------------- | ---- | ------------------------------------------------------ | +| `base64.zsh` | 🔡 | Encode/decode base64 — text, file path, or clipboard | +| `get_graph_user.zsh` | 👤 | Fetch MS Graph user info by ID or UPN | +| `imgflip-meme.zsh` | 🖼️ | Generate a meme via imgflip webhook, copy to clipboard | +| `ipv4-get.zsh` | 🌐 | Copy public IPv4 to clipboard | +| `no-as-a-service.zsh` | ❌ | Random rejection reason from No-as-a-Service | +| `x.zsh` | 🤖 | Copy Bruno ✕ character to clipboard | ## Environment files -Scripts that need secrets use `load_env` from `utils.sh`. Each script auto-loads `envs/.env` at runtime. +Scripts that need secrets use `load_env` from `utils.zsh`. Each script auto-loads `envs/.env` at runtime. **Example** — `envs/get_graph_user.env`: @@ -44,10 +44,10 @@ N8N_WEBHOOK_IMGFLIP_API_KEY="..." ## Adding a new script -1. Create `scripts/my-script.sh` with Raycast metadata headers. +1. Create `scripts/my-script.zsh` with Raycast metadata headers. 2. Source the helper and call `load_env`: ```bash - source "$HOME/Raycast/utils.sh" + source "$HOME/Raycast/utils.zsh" load_env VAR1 VAR2 || exit 1 ``` 3. Create the matching `envs/my-script.env` with the required variables. diff --git a/envs/.env.template b/envs/.env.template index 252028f..9bcb027 100644 --- a/envs/.env.template +++ b/envs/.env.template @@ -1,2 +1,2 @@ # Each script that needs to use the environment variables should have a env file with the same name as the script -# For example, if you have a script called `train.sh`, you should create a file called `train.env`. +# For example, if you have a script called `train.zsh`, you should create a file called `train.env`. diff --git a/scripts/base64.sh b/scripts/base64.zsh similarity index 99% rename from scripts/base64.sh rename to scripts/base64.zsh index 0d7bead..e6633d1 100755 --- a/scripts/base64.sh +++ b/scripts/base64.zsh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/zsh # Required parameters: # @raycast.schemaVersion 1 diff --git a/scripts/get_graph_user.sh b/scripts/get_graph_user.zsh similarity index 97% rename from scripts/get_graph_user.sh rename to scripts/get_graph_user.zsh index 61526fa..724ae64 100755 --- a/scripts/get_graph_user.sh +++ b/scripts/get_graph_user.zsh @@ -1,9 +1,9 @@ -#!/bin/bash +#!/bin/zsh # Required parameters: # @raycast.schemaVersion 1 # @raycast.title Get Graph User -# @raycast.mode silent +# @raycast.mode compact # @raycast.argument1 { "type": "text", "placeholder": "User ID or UPN" } # Optional parameters: @@ -16,7 +16,7 @@ USER_ID="$1" # shellcheck source=/dev/null -source "$HOME/Raycast/utils.sh" +source "$HOME/Raycast/utils.zsh" load_env AZURE_TENANT_ID AZURE_CLIENT_ID AZURE_CLIENT_SECRET || exit 1 TOKEN_RESPONSE=$(curl -s -w "\n%{http_code}" \ diff --git a/scripts/imgflip-meme.sh b/scripts/imgflip-meme.zsh similarity index 96% rename from scripts/imgflip-meme.sh rename to scripts/imgflip-meme.zsh index 84c2276..fd2bfb0 100755 --- a/scripts/imgflip-meme.sh +++ b/scripts/imgflip-meme.zsh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/zsh # Required parameters: # @raycast.schemaVersion 1 @@ -14,7 +14,7 @@ # @raycast.author Esteban Vincent # shellcheck source=/dev/null -source "$HOME/Raycast/utils.sh" +source "$HOME/Raycast/utils.zsh" load_env N8N_WEBHOOK_BASE_URL N8N_WEBHOOK_IMGFLIP_API_KEY || exit 1 QUERY="$1" diff --git a/scripts/ipv4-get.sh b/scripts/ipv4-get.zsh similarity index 96% rename from scripts/ipv4-get.sh rename to scripts/ipv4-get.zsh index 3082912..102a4be 100755 --- a/scripts/ipv4-get.sh +++ b/scripts/ipv4-get.zsh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/zsh # Required parameters: # @raycast.schemaVersion 1 diff --git a/scripts/no-as-a-service.sh b/scripts/no-as-a-service.zsh similarity index 97% rename from scripts/no-as-a-service.sh rename to scripts/no-as-a-service.zsh index 233335f..d53c905 100755 --- a/scripts/no-as-a-service.sh +++ b/scripts/no-as-a-service.zsh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/zsh # Required parameters: # @raycast.schemaVersion 1 diff --git a/scripts/x.sh b/scripts/x.zsh similarity index 95% rename from scripts/x.sh rename to scripts/x.zsh index 0929d57..f0dd60f 100755 --- a/scripts/x.sh +++ b/scripts/x.zsh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/zsh # Required parameters: # @raycast.schemaVersion 1 diff --git a/utils.sh b/utils.zsh similarity index 84% rename from utils.sh rename to utils.zsh index 29e49c3..a9d1a8f 100644 --- a/utils.sh +++ b/utils.zsh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/zsh # Helper: source this file, then call load_env # Usage: source "$HOME/Raycast/utils/load_env.sh" # load_env VAR1 VAR2 VAR3 || exit 1 @@ -6,7 +6,7 @@ load_env() { local caller - caller="$(basename "${BASH_SOURCE[1]}" .sh)" + caller="$(basename "${funcfiletrace[1]%:*}" .zsh)" LOADED_ENV_FILE="$HOME/Raycast/envs/${caller}.env" if [[ ! -f "$LOADED_ENV_FILE" ]]; then @@ -27,15 +27,15 @@ load_env() { if [[ "$value" == \"*\" ]]; then value="${value#\"}" value="${value%\"}" - elif [[ "$value" == \'*\' ]]; then - value="${value#\'}" - value="${value%\'}" + elif [[ "$value" == "'"*"'" ]]; then + value="${value#"'"}" + value="${value%"'"}" fi export "$key=$value" done < "$LOADED_ENV_FILE" for var in "$@"; do - if [[ -z "${!var}" ]]; then + if [[ -z "${(P)var}" ]]; then echo "❌ Missing $var in .env" return 1 fi