gum: سكربتات شيل فخمة بـ choose و confirm و spin

gum من Charm — أدوات choose و input و filter و confirm و spin لسكربتات شيل تفاعلية فخمة من غير ما تكتب Go. MIT · v2.0.2 · مش archived.

بتكتب سكربت شيل وعايز تسأل المستخدم سؤال، تخلّيه يختار من لستة، أو يأكّد قبل rm… فبتلجأ لـ read، أو select، أو dialog/whiptail، والنتيجة إمّا باهتة أو تقيلة. gum من charmbracelet اتعمل عشان الحالة دي: أدوات جاهزة وقابلة للتخصيص، تبني بيها سكربتات وaliases تفاعلية من غير ما تكتب سطر Go واحد.

أحدث إصدار وقت كتابة المقال: v2.0.2 (نُشر 24 سبتمبر 2026) — ترخيص MIT، والمشروع مش archived على GitHub (~24.5k★ وقت التحقق). الشعار الرسمي: A tool for glamorous shell scripts.

ليه gum؟

حسب الـ README، gum بيستغل قوة Bubbles و Lip Gloss جوه أوامرك وaliases — يعني واجهات طرفية حلوة من غير ما تبني TUI بنفسك. فيه أوامر زي: choose، confirm، file، filter، input، write، spin، style، table، pager، log، وغيرهم.

مثال عملي: Conventional Commits

التيوتوريال الرسمي بيبني سكربت commits بخطوات واضحة:

gum choose "fix" "feat" "docs" "style" "refactor" "test" "chore" "revert"

بعدين scope:

gum input --placeholder "scope"

ثم الملخص والتفاصيل:

gum input --value "$TYPE$SCOPE: " --placeholder "Summary of this change"
gum write --placeholder "Details of this change"

وأخيرًا التأكيد قبل الـ commit:

gum confirm "Commit changes?" && git commit -m "$SUMMARY" -m "$DESCRIPTION"

gum confirm بيخرج بـ exit code 0 (نعم) أو 1 (لا) — فينفع جوّه && / || مباشرة.

أوامر بتستخدمها كل يوم

Filter — fuzzy matching على لستة:

gum filter < flavors.txt > selection.txt
cat flavors.txt | gum filter --limit 2
cat flavors.txt | gum filter --no-limit

Input / Write — سطر واحد أو نص طويل (ctrl+d لإنهاء الـ write):

gum input > answer.txt
gum write > story.txt

Spin — سبينر أثناء تشغيل أمر:

gum spin --spinner dot --title "Buying Bubble Gum..." -- sleep 5

Style — تنسيق نص بحدود وألوان في سطر واحد (من الـ README).

تثبيت سريع

من الوثائق: brew install gum على macOS/Linux، وكمان pacman / dnf / nix / winget / scoop، وحزم من repo.charm.sh، أو:

go install charm.land/gum/v2@latest

(من v2 اسم الحزمة بقى charm.land/gum/v2.)

رأيي

read وselect لسه كويسين للسكربتات البسيطة. بس لو السكربت هيستخدمه ناس تانية — أو إنت بعد شهر — gum بيدي UX أوضح بكتير: اختيار، فلترة، تأكيد، سبينر، وتنسيق. حطّه في الـ PATH جنب fd وeza وbat، وابدأ بسكربت commit أو deploy فيه gum confirm قبل أي أمر مدمّر.

أسبوع معرض القاهرة للتكنولوجيا — لو رايح، قولنا هتحضر إيه؟ ولو عندك سكربت لسه على read، قولنا هتحوّله لـ gum بإيه أولًا 👇

المصادر

  • GitHub — charmbracelet/gum: https://github.com/charmbracelet/gum
  • Releases — v2.0.2: https://github.com/charmbracelet/gum/releases/tag/v2.0.2
  • README (أوامر وأمثلة): https://github.com/charmbracelet/gum#readme
  • gum
  • CLI
  • shell
  • Charm
  • DevTools
  • OpenSource