تقریبا تمام توسعه‌دهندگانی که می‌شناسم، داستانی برای تعریف‌کردن درباره‌ی چالش‌های کانفیگ ترمینال خود دارند. داستان معمولا این‌طور شروع می‌شود: یک آخر هفته کامل را غرق در فایل‌های تنظیمات و کانفیگ‌ها می‌شوند، همه‌چیز را دقیقا همان‌طور که می‌خواهند جفت‌وجور می‌کنند و مدتی بعد که کامپیوتر جدیدی می‌خرند، حتی یادشان نمی‌آید از بین آن ۴۰ تغییر ریزی که اعمال کرده بودند، کدام‌یک واقعا حیاتی بود.

به‌عنوان توسعه‌دهنده‌ای در تیم فنی «فورج» زومیت، همواره با چالش شخصی‌سازی ترمینال دست‌وپنجه نرم می‌کردم، تا اینکه تصمیم گرفتم یک‌بار برای همیشه، تمام ابزارهایی را که در ترمینال شخصی خودم استفاده می‌کردم، در قالب پکیج یکپارچه‌ای به‌نام Phoenix Term جمع‌آوری کنم؛ پروژه‌ی متن‌بازی که که تنها با اجرای یک دستور، ترمینال را متحول می‌کند. در ادامه با معرفی Phoenix Term همراه زومیت باشید.

پروژه‌ی Phoenix Term راحسین ضرابی، عضو تیم فنی «فورج» در گروه رسانه‌ای قلم توسعه داده است.

نگاهی سریع به لایه‌ها و ابزارها

Phoenix Term پکیج تمام‌عیاری برای macOS و Debian/Ubuntu است که بیش‌از ۱۸ ابزار CLI مدرن را به‌طور هم‌زمان نصب و پیکربندی می‌کند؛ در جدول زیر، جزئیات مربوط به ابزارهای داخل پکیج را مشاهده می‌کنید.

ابزارهای موجود در پکیج Phoenix Term

ابزار و کامپوننت استفاده‌شده

عملکرد و جزییات پکیج

والپیپر اختصاصی، فونت ComicShannsMono Nerd، رنگ LightSeaGreen

همراه با پلاگین‌های پیشنهاد خودکار کلمات و هایلایت سریع دستورات

نمایش اطلاعات مسیر و گیت در قالب کپسول‌های رنگی

مدیریت پیشرفته پنجره‌ها به همراه پلاگین‌های extrakto و tmux-cowboy و ...

نمایش زنده‌ی وضعیت پردازنده، رم، دیسک، شبکه، باتری و ساعت

نمایش نام با فونت گرافیکی ANSI Shadow در بالای هر شل

ویرایشگر پیشرفته‌ با تم اختصاصی مشکی-طلایی Phoenix

phoenix-cheat . phxssh

دسترسی سریع به لینک‌ها/سرورها، کلیپ‌بورد یکپارچه، سیستم چیت‌شیت تب‌بندی شده و مدیریت SSH

fzf · zoxide · atuin · eza · bat · fd · ripgrep · yazi · btop · tldr · gh

پکیج کامل ابزارهای جست‌وجو، ناوبری، مدیریت فایل و تاریخچه‌ی هوشمند

با ابزار‌هایی که پکیج Phoenix Term به ترمینال اضافه می‌کند، دیگر به هدردادن وقت برای پیکربندی لایه‌ها و ابزارهای ترمینال خود نیازی ندارید؛ همه‌چیز در کمتر از چند دقیقه آماده‌ی کار است.

در اولین نگاه؛ پس‌از نصب چه چیزی منتظر شماست؟

به‌محض بازکردن اولین پنجره‌ی Ghostty، با محیط زیر روبه‌رو می‌شوید:

    بنر خوش‌آمدگویی اختصاصی:نام شما با فونت بزرگ گرافیکی متنی در بالای ترمینال خودنمایی می‌کند.نوار وضعیت تب‌ها:کپسول‌های رنگی که وضعیت تب‌های فعال را به تصویر می‌کشند.سایدبار پایش سیستم (phoenix-sysmon):نمایش زنده‌ی مصرف منابع (CPU، رم، دیسک، شبکه و باتری) در سمت راست صفحه، بدون اشغال فضای اصلی کار.Starship Prompt:خط فرمان دیگر یک متن ساده و بی‌روح نیست؛ بلکه به‌صورت کپسول‌های رنگی، مسیر دایرکتوری، وضعیت گیت (Git Status) را به تصویر می‌کشد.خطوط تفکیک‌کننده‌ی دستورات:یک خط افقی کامل بالای هر prompt کشیده می‌شود. اگر اجرای دستور قبلی بیش‌از ۱٫۵ ثانیه طول کشیده باشد، مدت‌زمان دقیق آن با رنگ طلایی ثبت می‌شود تا نیازی به تایپ دستورات سنجش زمان نداشته باشید.

امکانات و ابزارهایی که با Phoenix Term به ترمینال می‌آیند

پروژه‌ی Phoenix Term صرفا یک پوسته‌ی ظاهری نیست؛ بلکه ابزارهای زیرساختی و مدرنی را نصب می‌کند که لایه‌های ترمینال را ارتقا می‌دهند؛ از جمله‌ی این ابزارهای زیرساختی می‌توان به موارد زیر اشاره کرد.

۱. لایه‌ی ترمینال و شل

پایه‌ی پکیج Phoenix Term روی Ghostty بنا شده؛ ترمینالی که با GPU رندر می‌کند و از نظر سرعت راه‌اندازی و رندر متن یکی‌از سریع‌ترین گزینه‌های موجود است. Phoenix Term ترمینال Ghostty را با فونت ComicShannsMono Nerd Font و والپیپر تاریک اختصاصی پیکربندی می‌کند.

شل پیش‌فرض به Zsh ارتقا می‌یابد و دو پلاگین مهم همراهش نصب می‌شود:

    zsh-autosuggestions:با متن خاکستری کم‌رنگ، ادامه‌ی احتمالی دستور را پیشنهاد می‌دهد؛fast-syntax-highlighting:دستورات نادرست را با رنگ قرمز و دستورات معتبر را با سبز نشان می‌دهد؛ قبل از اینکه Enter بزنید.

معماری پکیج به‌گونه‌ای است که متغیر TERM_PROGRAM را بررسی می‌کند؛ اگر داخل VS Code Terminal یا یک SSH session باشید و Ghostty نداشته باشید، لایه‌ی tmux به‌طور خودکار کنار می‌رود تا alias-ها و ابزارهای شل بدون هیچ اختلالی کار کنند.

۲. مدیریت پنجره‌ها با tmux

tmux یک multiplexer ترمینال است؛ به‌زبان ساده، به کاربر اجازه می‌دهد پنجره‌ی ترمینال را به چند بخش (pane) تقسیم کند، بین سشن‌های مختلف جابه‌جا شود و سشن‌ها را حتی بعداز بستن ترمینال زنده نگه دارد.

پکیج Phoenix Term به‌ازای هر پنجره‌ی Ghostty یک tmux session مستقل با شناسه‌ی اختصاصی می‌سازد تا سشن‌ها با هم تداخل نداشته باشند. چند پلاگین هم همراهش نصب می‌شود:

    extrakto(Ctrl-A Tab):فرض کنید چند دستور قبل، یک path یا URL در خروجی ترمینال دیدید. با extrakto نیازی به اسکرول‌کردن و کپی دستی نیست؛ یک fuzzy search روی کل scrollback باز می‌شود و هر چیزی که انتخاب کنید مستقیم در خط فرمان تزریق می‌شود.tmux-cowboy(Ctrl-A *):وقتی یک پروسه هنگ می‌کند و Ctrl-C جواب نمی‌دهد، این پلاگین یک SIGKILL مستقیم به پروسه‌ی فعال آن pane می‌فرستد.tmux-resurrect و tmux-continuum:سشن‌ها، پنجره‌ها و pane-ها را ذخیره می‌کنند تا بعد از ری‌استارت سیستم، دقیقا به همان‌جایی برگردید که بودید.

۳. ادیتور Neovim با LazyVim

Neovim یک نسخه‌ی مدرن از Vim است که به‌صورت async کار می‌کند و از LSP (Language Server Protocol) پشتیبانی بومی می‌کند؛ بدین‌مفهوم که auto-complete، تعریف توابع و خطاهای real-time مثل VS Code را داخل ترمینال در اختیارتان می‌گذارد.

LazyVim یک توزیع پیش‌پیکربندی‌شده‌ی Neovim است که پلاگین‌های ضروری را با هم نصب و تنظیم می‌کند تا از اول نیازی به ساعت‌ها کانفیگ نداشته باشید. Phoenix Term یک تم طلایی-مشکی اختصاصی هم روی آن اعمال می‌کند.

۴. ابزارهای خط فرمان اختصاصی

ابزارهای کابردی دیگری که در خط فرمان پکیج Phoenix Term در دسترس دارید، موارد زیر هستند:

    phxssh:یک TUI برای مدیریت SSH روی ssh/config./~ — اتصال به host، اضافه‌کردن، ویرایش، جست‌وجو و پین‌کردن host-های پرکاربرد. چون مستقیم روی ssh/config./~ کار می‌کند، هر چیزی که اضافه کنید با دستور مستقیم ssh هم قابل استفاده است.دستور web:یک popup fuzzy برای مدیریت لینک‌های پرکاربرد؛ ذخیره، جست‌وجو و بازکردن با Enter. دستور web dev پورت‌های در حال listen روی localhost را اسکن می‌کند و لیستشان را نشان می‌دهد تا با یک Enter در مرورگر باز شوند؛ قابلیتی که هنگام اجرای هم‌زمان چند پروژه روی پورت‌های مختلف، بسیار کاربردی است.phoenix-clip:در tmux کپی‌کردن به کلیپ‌بورد سیستم به پیکربندی جداگانه نیاز دارد و روی لینوکس هم pbcopy وجود ندارد. phoenix-clip این مشکل را حل می‌کند؛ روی مک از pbcopy، روی Wayland از wl-copy و روی X11 از xclip استفاده می‌کند و در همه‌ی محیط‌ها یکسان رفتار می‌کند.phoenix-cheat(Cmd-/ در مک، Ctrl-Shift-/ در لینوکس): یک popup تب‌بندی‌شده با تمام alias-ها، shortcutها و دستورات سیستم. نیازی به حفظ‌کردن چیزی نیست.

۴. ابزارهای مدرن جایگزین و کمکی (CLI Tools)

دستورات کلاسیک Unix مثل ls، cat و find دهه‌هاست تغییر نکرده‌اند. نسخه‌های جدیدتری وجود دارند که همان کار را با سرعت بیشتر، خروجی بهتر و قابلیت‌های اضافه انجام می‌دهند. Phoenix Term هر دو دستور را به جایگزین alias می‌کند؛ بدین‌مفهوم که چه cat بزنید چه bat، در هر دو حالت bat اجرا می‌شود:

آیکون فایل‌ها، ستون git status، رنگ‌بندی نوع فایل

syntax highlighting، شماره‌خط، نمایش تغییرات git در margin

سریع‌تر، احترام به gitignore، ساده‌تر، regex

ده‌ها برابر سریع‌تر، multi-core، احترام به gitignore

تاریخچه‌ی مسیرها را یاد می‌گیرد؛ cd phoenix-term کافی است تا به پروژه بپرد

نمودار real-time مصرف CPU/رم، مدیریت پروسه‌ها با کیبورد

تاریخچه در SQLite، جست‌وجوی fuzzy با فیلتر دایرکتوری، exit code و زمان

ابزارهای مکمل که همراه پکیج Phoenix Term نصب می‌شوند:

TUI تمام‌صفحه برای git — stage، commit، rebase و merge بدون حفظ دستور

TUI تمام‌صفحه برای Docker؛ کانتینرها، ایمیج‌ها، لاگ و stats در یک صفحه

TUI برای مدیریت SSH؛ اتصال، اضافه‌کردن، ویرایش و جست‌وجوی host-ها از روی ssh/config./~

file manager ترمینالی که هنگام خروج، شل را به دایرکتوری انتخابی می‌برد

خلاصه‌ی کاربردی و مثال‌محور man page؛ بدون متن اضافه

ابزار رسمی خط فرمان GitHub ؛PR، issue، repo مستقیم از ترمینال

fuzzy finder عمومی؛ جست‌وجوی فایل، تاریخچه و هر لیستی

راهنمای شورتکات‌ها (Cheat Sheet):برای هیچ‌کدام از ابزارها نیازی به حفظ‌کردن شورتکات‌ها ندارید؛ کلید میان‌بر Cmd-/ (در مک) یا Ctrl-Shift-/ (در لینوکس) و همچنین Ctrl-A ? یک پاپ‌آپ گرافیکی و تب‌بندی‌شده از تمام alias-ها، دستورات و شورت‌کات‌های سیستم را روی صفحه باز می‌کند.

CLI اختصاصی phoenix-term

به‌عنوان توسعه‌دهنده، پایداری ابزار برایم اولویت اول بود؛ به‌همین دلیل یک CLI اختصاصی به نام phoenix-term طراحی کردم که مدیریت همه چیز را از یک جا ممکن می‌کند:

phoenix-term settings

منوی تعاملی برای تغییر نام بنر، والپیپر، ادیتور و...

تنظیمات با آپدیت پاک نمی‌شوند

در پس‌زمینه و بدون API call به گیت‌هاب،

وجود نسخه‌ی جدید را بررسی می‌کند

به آخرین نسخه ارتقا می‌دهد

تمام تنظیمات شخصی دست‌نخورده می‌مانند

به نسخه‌ی قبلی برمی‌گردد

و چون revert هم snapshot می‌گیرد،

خودش هم قابل برگشت است

سلامت symlink‌ها، پکیج‌ها و فونت‌ها را بررسی می‌کند

روی لینوکس شورت‌کات‌های

GNOME/KDE را هم اسکن می‌کند

تغییرات نسخه‌ی فعلی را نمایش می‌دهد

اگر چند نسخه را یکجا آپدیت کرده باشید،

هر نسخه یک تب جداگانه دارد

چطور Phoenix Term را نصب کنیم؟

روی macOS و تمام توزیع‌های مبتنی‌بر Debian/Ubuntu (مینت، Pop!_OS، Kali و...)، برای نصب پکیج Phoenix Term، فقط این یک دستور کافی است:

اسکریپت، سیستم‌عامل و معماری پردازنده (Intel یا Apple Silicon/ARM) را تشخیص می‌دهد، پکیج‌منیجرها را بررسی می‌کند و همه‌ی ابزارها و فونت‌ها را بدون دستکاری فایل‌های حیاتی سیستم نصب می‌کند. بعد از اتمام، یک پنجره‌ی Ghostty جدید باز کنید. تمام؛ لذت ببرید.

مسیر مخصوص توسعه‌دهندگان:مخزن را clone کنید و bash install.sh را اجرا کنید. در این حالت تمام کانفیگ‌ها به داخل ریپو symlink می‌شوند؛ یعنی هر تغییری در فایل‌های مخزن بلافاصله در ترمینال اعمال می‌شود.

دنیای متن‌باز با همین ایده‌های اشتراکی جلو می‌رود. منPhoenix Termرا ساختم تا پیچیدگی‌های شخصی‌سازی ترمینال را پشت یک اسکریپت هوشمند پنهان کنم تا هم خودم در کارهای روزمره و توسعه‌ی زومیت سرعت بیشتری داشته باشم، هم دیگر توسعه‌دهندگان بتوانند از یک محیط استاندارد، زیبا و پرسرعت بهره‌مند شوند.

پروژه‌ی Pheonix Term کاملا متن‌باز و تحت لایسنس MIT منتشر شده است. اگر شما هم می‌خواهید به بهبود این ابزار کمک کنید، پیشنهاد می‌کنم حتما سری به صفحه‌ی گیت‌هاب آن بزنید، به آن ستاره (Star) بدهید یا ایده و باگ‌های خود را در بخش Issues با من در میان بگذارید:

نظر شما درباره این ابزار مدرن چیست؟ آیا محیط خط فرمان خود را شخصی‌سازی کرده‌اید یا از ظاهر ساده و پیش‌فرض سیستم‌عامل استفاده می‌کنید؟ نظرات و تجربیات خود را در بخش دیدگاه‌ها با من و دیگر کاربران زومیت به اشتراک بگذارید.

#Linux