Skip to content
Droplet Zsh Setup

Droplet Zsh Setup

ตั้งค่า zsh บน Droplet

เป้าหมาย

เพื่อให้สามารถใช้งานได้สะดวก และให้เหมือนกับเครื่องที่ทำงานประจำที่บ้านซึ่งใช้ Arch Linux สิ่งแรกที่ต้องทำคือ ปรับ Droplet ซึ่งใช้บริการจาก Digital Ocean เดิม shell จะเป็นแบบ bash เพราะใช้ Ubuntu ซึ่ง shell ที่ติดตั้งมาแบบ bash เพื่อให้สะดวกเลย เปลี่ยนจาก bash → zsh บน droplet ให้หน้าตา/พฤติกรรมใกล้เคียงกับเครื่อง Arch (archGI) ที่ใช้งานประจำ โดยไม่ใช้ Oh My Zsh (มี plugin/theme เกินความจำเป็น ทำให้โหลดช้าและคุมยาก) เขียน .zshrc เองแบบเรียบง่าย

สรุปสิ่งที่ต้องดำเนินการ

✅ zsh ติดตั้ง เป็น default shell ของ root
✅ ไม่ใช้ Oh My Zsh — เขียน .zshrc เองล้วนๆ
✅ zsh-autosuggestions  ต้องทำงาน
✅ zsh-syntax-highlighting ต้องทำงาน
✅ Prompt เหมือนเครื่อง Arch (archGI) — สลับใช้แล้วไม่งง
✅ Alias สะดวก: blog (cd ไป blog-content), deploy (build+deploy ในคำสั่งเดียว)
✅ bash_history เก่า backup ไว้ที่ ~/backup-configs/ 

สิ่งที่ติดตั้ง

อย่างวิธีติดตั้งหน้าที่
zshapt install zshshell หลัก
zsh-autosuggestionsgit clone เข้า ~/.zsh/เดาคำสั่งจาก history เป็นตัวสีเทาจางๆ กด → เพื่อ accept
zsh-syntax-highlightinggit clone เข้า ~/.zsh/ไฮไลท์สีคำสั่งที่พิมพ์ (เขียว=ถูก, แดง=ผิด/ไม่มีคำสั่งนี้)

หมายเหตุ: บนเครื่อง Arch ติดตั้ง 2 ตัวนี้ผ่าน pacman ได้เลย (/usr/share/zsh/plugins/...) แต่ Ubuntu ไม่มี package สำเร็จรูปแบบนี้ ต้อง git clone เอาเองจาก GitHub

ขั้นตอนติดตั้งแบบเต็ม (หลักการใช้ได้กับเครื่องอื่น )

# 1. ติดตั้ง zsh
apt update
apt install -y zsh

# 2. ตั้งเป็น default shell
chsh -s $(which zsh) root

# 3. Clone plugins
mkdir -p ~/.zsh
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ~/.zsh/zsh-syntax-highlighting

# 4. เขียน .zshrc
cat > ~/.zshrc << 'EOF'
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8

# Plugins (autosuggestions ต้องมาก่อน syntax-highlighting เสมอ)
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# Prompt (Simple & Clean)
PROMPT='%F{cyan}%n@%m %F{yellow}%1~ %f$ '
setopt COMBINING_CHARS

# Aliases
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias blog='cd ~/blog-content'
alias deploy='cd ~/blog-content && ./deploy.sh'

export PATH="$HOME/.local/bin:$PATH"
setopt interactive_comments

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt SHARE_HISTORY
setopt HIST_IGNORE_DUPS

# syntax-highlighting ต้อง source เป็นบรรทัดสุดท้ายสุดของไฟล์เสมอ
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
EOF

# 5. โหลดใหม่
source ~/.zshrc

# 6. ออกแล้วเข้าใหม่เพื่อให้ default shell เปลี่ยนจริง
exit
# แล้ว ssh เข้าใหม่

กฎสำคัญที่ต้องจำ — ลำดับการ source ใน .zshrc

1. zsh-autosuggestions   ← source ก่อน
2. (alias, prompt, history config อื่นๆ อยู่ตรงกลางได้)
3. zsh-syntax-highlighting   ← ต้องอยู่บรรทัดสุดท้ายสุดเสมอ

เหตุผล: zsh-syntax-highlighting ต้องเป็นตัวสุดท้ายที่ hook เข้ากับ zsh’s line editor ถ้า source ก่อนตัวอื่น อาจทำงานผิดพลาดหรือชนกับ plugin อื่น

Alias ที่ตั้งไว้ใช้กับงาน Hugo blog

aliasทำอะไร
blogcd ~/blog-content
deploycd ~/blog-content && ./deploy.sh (build+deploy คำสั่งเดียว)

ปัญหาที่เจอระหว่างตั้งค่า (เก็บไว้กันลืม)

ปัญหา: Clone plugin ครั้งแรกดูเหมือนสำเร็จ แต่พอเช็คจริง ls ~/.zsh/zsh-autosuggestions/ ขึ้น “No such file or directory”

สาเหตุ: คำสั่ง git clone ไม่ได้ถูกรันจริง (หลุดไปโฟกัสเรื่องอื่นระหว่างทำ เช่นตอน uninstall Oh My Zsh)

บทเรียน: หลัง git clone ทุกครั้ง ให้ ls -la เช็คว่าไฟล์มีอยู่จริงก่อน source เสมอ อย่าเชื่อว่า “รันไปแล้วน่าจะได้”

เทียบกับเครื่อง Arch (archGI)

Prompt และ alias หลักตั้งให้เหมือนกับเครื่อง Arch ที่ใช้ประจำ เพื่อสลับใช้งานระหว่าง 2 เครื่องแล้วไม่งง:

%F{cyan}%n@%m %F{yellow}%1~ %f$

= user@host path $ สีฟ้า/เหลือง เรียบง่าย ไม่มี git branch หรือ emoji แสดงใน prompt