มาแต่ง Terminal ด้วย oh-my-posh กันเถอะ (powershell และ zsh)
สำหรับบทความนี้ก็เป็นบทความแรกของผมนะครับผมซึ่งก็เขียนช่วงใกล้สอบด้วยเพราะอ่านหนังสือเบื่อๆ เลยหาอะไรทำ😅
เกริ่มก่อนนะครับ (ตรงนี้ขก.อ่านข้ามเลยนะครับ) ก่อนหน้านี้ผมพยายามหาวิธีในการแต่งตัว terminal ของผมเองทั้งใน Windows แล้วก็ Mac ด้วยซึ่งด้วยความที่ macOS เป็น UNIX ก็จะพอมี shell ทางเลือกอื่นๆให้ใช้บ้างเช่น bash, zsh หรือ fish ซึ่งตอนแรกผมก็ไปเลือกใช้ fish เพราะ มีธีมสวนแถมยังมี auto complete อีกต่างหาก แต่ก็ต้องมาเจอปัญหาว่ามันไม่รองรับ POSIX เอาจริงๆปกติก็ไม่ค่อยได้ใช้หรอก แต่พอถึงคราวที่ต้องใช้ก็ต้องมาปวดหัวเปิดเน็ตหาวิธีอื่นๆมาใช้แทนอีก ไม่ต้องพูดถึงตัว Windows ที่ตัว terminal ก็มีให้ใช้หลักๆแค่ powershell ซึ่งก็ไม่ค่อยมีอะไรซัพพอร์ตด้วย
สุดท้ายผมก็มาเจอ oh-my-posh นี่แหละ ตอนนี้ก็ติดงอมแงมเลยเพราะมีความยืดหยุ่น ลูกเล่นเยอะ แถมยังเป็น open source เราก็สามารถเขียน segment หรือ ธีมเพิ่มเติมเองได้ด้วย
ปล.สำหรับตัว macOS ในบทความนี้ผมจะใช้ itermนะครับเพราะ config ฟอนต์ใน terminal ธรรมดาไม่ไหวจริง ๆ
ติดตั้ง oh-my-posh
ก่อนอื่นเรามาลง oh-my-posh กันก่อนเลยซึ่งจริงๆมีวิธีลงหลายวิธีนะ ใครอยากลองวิธีอื่นก็เปิดจากใน docs ได้เลย
Windows
ก่อนอื่นเปิด powershell หรือ Windows Terminal (แนะนำ) ขึ้นมาก่อน จากนั้นก็ install oh-my-posh ด้วยคำสั่ง
winget install JanDeDobbeleer.OhMyPosh -s winget
ทดสอบด้วย
(Get-Command oh-my-posh).Source
จะต้องได้ path ของโปรแกรมออกมา
สำหรับเวลา upgrade ให้ใช้ คำสั่ง
winget upgrade JanDeDobbeleer.OhMyPosh -s winget
macOS
สำหรับ mac อันนี้จะลงผ่าน Homebrew นะครับใครยังไม่ก็ลง ก่อนตามนี้เลย ใครมีแล้วข้ามไปลง oh-my-posh ได้เลยครับ
brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
ทดสอบด้วย
brew -v
ถ้ามี version ออกมาแปลว่าใช้ได้
จากนั้นลง oh-my-posh
brew install jandedobbeleer/oh-my-posh/oh-my-posh
สำหรับเวลา upgrade ให้ใช้ คำสั่ง
brew update && brew upgrade oh-my-posh
Init oh-my-posh
เราจะมา เริ่มใช้งานกัน
สำหรับ windows รัน
oh-my-posh init pwsh | Invoke-Expression
ส่วน macOS (zsh)
eval "$(oh-my-posh init zsh)"
เราก็จะเห็น terminal สวยๆกันแล้ววว!!!
แต่ว่าจะสังเกตุว่ายังใช้งานไม่ได้เพราะเวลาเรา ปิดเปิด terminal ใหม่มันก็จะกลับไปเป็นเหมือนเดิม งั้นสิ่งที่ต้องทำคือ เราต้องรัน script นี้ทุกครั้งที่จะใช้หรอ? คำตอบคือไม่ต้องครับ ปกติแล้วจะมีไฟล์ที่ ตัว shell จะเข้าไปรันก่อนทำงานทุกครั้งเราแค่ เข้าไปเพิ่ม script ในไฟล์นั้นก็เรียบร้อย
สำหรับ windows
notepad $PROFILE
ถ้าเปิดครั้งแรกมันจะขอสร้างไฟล์ เราก็ตอบตกลงไป ในที่นี้ใครมี text editor ตัวอื่นก็ใช้ได้นะ vim, nvim, lvim, หรือ vscode แต่ notepad น่าจะมีทุกเครื่อง จากนั้นแทรก script เข้าไปสักบรรทัด
oh-my-posh init pwsh | Invoke-Expression
จากนั้น save file กลับมาหน้า terminal รันคำสั่ง
. $PROFILE
ก็ใช้งานได้เรียบร้อย
สำหรับ macOS
nano ~/.zshrc
อันนี้ก็เหมือนกัน ถ้าใครใช้ text editor ตัวอื่นก็ได้เลย จากนั้นแทรก script เข้าไป
eval "$(oh-my-posh init zsh)"
กด control + x แล้วกด y เพื่อเซฟ
จากนั้น save file กลับมาหน้า terminal รันคำสั่ง
exec zsh
ก็ใช้งานได้เรียบร้อย
ถึงตรงนี้ทุกคนน่าจะเห็นแถบสีๆมีตัวหนังสือกันแล้ว แต่น่าจะติดปัญหาว่ามันเป็นตัวหนังสือประหลาดๆ นั้นเพราะว่าเรายังไม่ได้ลง ฟอนต์ นั้นเอง โดยฟอนต์ที่เราจะใช้เป็นพวกตะกูล Nerd fonts ซึ่งคือฟอนต์ที่มีพวกไอคอน หรือบางตัวก็จะมี ligatures อยู่ด้วย
เลือกโหลดอันนี้ชอบตรงนี้เลย กดตรงนี้
อันนี้กดโหลดแล้วลงเหมือนฟอนต์ปกติเลย
จากนั้นเราก็มาเปิดใช้ฟอนต์ใน terminal
Windows ( Windows Terminal )
กดตรงเครื่องหมาย ลูกศรลงไปที่ Settings หรือ กด Ctrl + ,
กดไปที่ Windows PowerShell >> Appearance
เปลี่ยนเป็น Nerd Font
macOS ( iTerm )
ปล.อีกรอบนะครับเพื่อใครไม่ได้อ่านข้างบนว่า terminal ใน mac ผมใช้ iterm นะ!!!
เข้าไปที่ preferences หรือ กด command + ,
เลือก Profile >> Text >> Font จากนัดเลือก Nerd Font ที่เราโหลดมา ปรับขนาดอะไรตามใจชอบเลย
เป็นอันเรียบร้อยแค่นี้ก็ใช้งานได้แล้ว แต่สำหรับคนที่ไม่ชอบธีม default เราก็มาเลือกธีมกันต่อเลย
ได้เวลามาเลือกธีมกัน
หลังจากที่เราติดตั้ง init oh-my-posh เรียบร้อยแล้วเราก็มาเลือกธีมกัน ซึ่งกดเลือกธีม ตรงนี้เลย
สำหรับ Windows เราสามารถรันคำสั่ง
Get-PoshThemes
เพื่อดูพรีวิวของแต่ละธีมใน terminal ของเราได้
ตรงนี้ก็ลองเลื่อนหาดูว่าอยากได้อันไหนก็กดเข้าไปเลย พอเรากดไปมันก็จะเด้งไปที่หน้า repo github ของธีมนั้นๆ แบบนี้ (อันนี้เราเลือก M365Princess)
กดตรง Raw
จากนั้นคัดลอก url ด้านบนมา
กลับไปเปิดไฟล์ script init เพิ่ม flag --config
แบบนี้
--config 'https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/M365Princess.omp.json'
จะได้คำสั่งที่เป็น
Windows
oh-my-posh init pwsh --config 'https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/M365Princess.omp.json' | Invoke-Expression
macOS
eval "$(oh-my-posh init zsh --config 'https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/M365Princess.omp.json')"
เท่านี้ก็ได้เรียบร้อย
สำหรับอันบทความนี้ก็จบเท่านี้แล้วนะคร้าบ จริงตัว oh-my-posh เราสามารถ customize เป็น theme ของตัวเองได้หรือเขียนโค้ดเพิ่มลูกเล่นแปลกเองได้ด้วยโดยจะใช้เป็นภาษา Go แล้วก็จะมีกฎในการ PR ต่างๆอันนี้ใครสนใจอ่านเพิ่มเติมจาก docs ได้เลยนะครับ
แถมให้นะครับสำหรับคนที่ใช้ zsh อยู่แล้วต้องการพวก auto complete ก็จะมี fig.io ก็เป็นอีกหนึ่งของเล่นที่ทรงพลังมากเลยครับยิ่งมารวมกับ oh-my-posh แล้วคือสวยมากเลย
ยังไงก็บทความนี้เป็นบทความแรกที่ผมเขียนนะครับ ถ้าเกิดว่ามีข้อผิดพลาดยังไงก็ขออภัยด้วยนะครับ ไว้เจอกันบทความหน้าครับ Bye ~~~