Development machine setup

อัพเดต 10 เมษา 2016: ใช้ Dotfiles เลยดีกว่า

เมื่อวานผมคิดอยู่ว่าอนาคตที่จะต้องเจอแน่ๆ คือต้องทำงานใน Windows เพราะลินุกซ์เองผมยังไม่รู้สึกว่าใช้งานเป็นเครื่องหลักผมได้ (แต่สำหรับอีกเครื่องหนึ่งหรือจะ dual boot ค่อนข้างจะโอเค) ก็เลยลองหาดูว่าแล้ว #คนใช้วินโดวส์เค้าทำงานกับอะไร ก็ไม่ค่อยเจออะไรน่าสนใจเท่าไร

ก็คิดว่าน่าจะเขียนบ้างว่าแล้วบนแมคล่ะ ผมเซตอะไรไว้บ้าง ไว้เป็น checklist เวลาผมลงใหม่ด้วย และเผื่อคนที่หลงเข้ามาจะเอาไปใช้ตามด้วย


Dark mode

เปิด Dark mode ได้ใน System Preferences > General > Use dark menu bar and Dock

OS X for Hackers

มีคนเขียน shell script OS X for Hackers ไว้สักพักแล้ว ผมเห็นทีแรกแล้วก็พบว่ามันมี option หลายตัวเลยที่ผมรำคาญมากแล้วมันมีทางแก้ให้ ปกติผมก็ไม่ได้รันทั้งสคริปต์แต่จะตัดเฉพาะท่อนที่สนใจเข้ามา (เพิ่งเห็นแฮะว่าตอนนี้มันใช้ y/n question แล้ว แต่ก่อนต้องก๊อปแปะรันเอง)

อันที่เคยใช้ก็จะมี

  • Set computer name
  • Expand save panel by default (ปกติแมคเวลาเซฟงานจะขึ้นแค่ให้ใส่ชื่อไฟล์กับ dropdown เลือก folder แล้วต้องกดขยายเพื่อ browse folder อันนี้จะทำให้มันขยายให้เอง)
  • Reveal IP address, hostname, OS version, etc. when clicking the clock in the login window (เอาจริงๆ ก็ไม่ได้ใช้นะ แต่ว่าเปิดไว้ก็ไม่เสียหาย)
  • Disable hibernation (เครื่องผมมีปัญหา hibernate แล้วเครื่องจะหน่วง)
  • Enabling full keyboard access for all controls​
  • Disabling press-and-hold for special keys in favor of key repeat
  • Setting a blazingly fast keyboard repeat rate (อันนี้มันเซตเร็วไป ผมปรับเพิ่มขึ้นจากค่า default เค้า)
  • Enabling subpixel font rendering on non-Apple LCDs
  • Enabling HiDPI display modes (ทำให้ใน Display สามารถเลือกปรับ resolution แบบ retina บนจอที่ไม่ใช่ retina ได้ อย่างจอผม 1440×900 ถ้าเปิด HiDPI จะเหลือ 720×450)
  • Show all filename extensions in Finder by default
  • Show status bar in Finder by default
  • Avoid creation of .DS_Store files on network volumes
  • Enabling Safari’s debug menu
  • Enabling the Develop menu and the Web Inspector in Safari
  • Adding a context menu item for showing the Web Inspector in web views

แอพ

(ถ้าไม่ได้ทำ link ไว้แสดงว่าลงจาก cask ได้ แต่บางอันผมอยากให้มันอยู่ใน /Applications ก็จะลงด้วยมือ)

  • Homebrew
  • Homebrew Cask
  • XCode
  • รัน xcode-select ใน Terminal เพื่อลง compiler ด้วย
  • iTerm 2
  • Google Chrome
  • Sublime Text 3 (ใน Cask เป็น 2)
  • Steam
  • Slate
  • Karabiner
  • MagicPrefs
  • gfxCardStatus (ผมไม่ได้ใช้ปรับการ์ดจอนะ ใช้แค่ดูว่า GPU ตัวไหนทำงานอยู่)
  • Dropbox
  • Caffeine (ตอนหลังๆ ผมไม่ได้ใช้แล้วนะ เขียน script มาแทนซึ่งมันจะพูดถ้ามีคนดึงปลั๊กด้วย)
  • Java
  • Dash — ไม่ฟรี ใช้ DevDocs.io แทนได้
  • F.lux
  • Trim Enabler
  • ImageOptim
  • ForkLift — ไม่ฟรี ใช้ Cyberduck แทนได้
  • ชุด iWork
  • XQuartz

เมาส์ & Keyboard

OS X

Screen Shot 2558-03-26 at 5.49.58 PM

ตั้งค่า Magic Mouse ที่ผมใช้ก็จะมี

  • Secondary click: click on right side
  • ปิด Smart zoom
  • ปิด Swipe between full screen apps
  • Swipe between pages: Swipe left or right with two fingers

Mission control เนี่ยปกติแล้วผมจะใช้ gesture ที่ตั้งใน MagicPrefs แทน ส่วนที่ใช้ two finger swipe between pages เพราะใช้นิ้วเดียวมันจะลั่นบ่อยมากเวลาใช้ browser พอปรับเป็นสองนิ้วแล้ว effect ตอน swipe จะหายไปด้วย แต่ใช้ได้เหมือนกัน ผมว่ามันเหมาะกับใช้งานจริงมากกว่านะ

สำหรับ Swipe between apps ผมปัดบน Touchpad เอาเพราะว่า gesture มันจะทับกันกับ Swipe between pages

Screen Shot 2558-03-26 at 5.52.44 PM

สำหรับ keyboard ไม่มีอะไรต้องตั้ง แต่สำหรับ PC Keyboard ผมจะตั้ง modifier keys ให้ตรงตำแหน่งกับคีย์บอร์ดแมค จะได้กดสะดวกๆ ซึ่งใน Karabiner ก็จะอ้างอิง key จากที่แก้ไขตรงนี้แล้วด้วย

Karabiner

เวลาตีดอทในแมคผมจะใช้แอพ Karabiner ปรับปุ่มนิดหน่อย โดยจะมี profile ปกติและ profile Dota แยกกันไปเลย option ที่ใช้ก็มีดังนี้

Karabiner: Default

Screen Shot 2558-03-26 at 1.11.27 PM

setting ตัวนี้ผมใช้เซตให้ USB keyboard ผมทำงานคล้ายๆ กับ keyboard ภายใน

  • Don’t remap internal keyboard
  • F1..F12 to Functional Keys
  • Enter to Return
  • Use PC Style Home/End #2
  • Use PC Style PageUp/PageDown
Karabiner: Dota

Screen Shot 2558-03-26 at 5.50.25 PM

  • Change Command_L Key to Option_L
  • Change Option_L Key to Command_L
  • F1..F12 to Function Keys

สำหรับ setting นี้เวลาเปลี่ยนภาษาจะต้องกด opt+space แทน แต่เวลาตีดอทปุ่ม alt จะอยู่ที่เดียวกับ Windows ในคอมทั่วไป (คือผมใช้ PC mechanical keyboard บนแมค ไม่ได้ใช้ Apple keyboard) แต่ข้อเสียคือจะกด pause ไม่ได้ ก็จะใช้คอนโซลสั่ง dota_pause แทน

MagicPrefs

Screen Shot 2558-03-26 at 1.12.33 PM

อีกแอพนึงที่ใช้ก็คือ MagicPrefs ซึ่ง settings ที่ใช้ก็จะมี

  • Tracking speed ปรับไปที่ 3 ขีด
  • One Finger Middle Axis Click: Middle Click (เอาไว้ปิดแท็บใน chrome)
  • Two Finger Swipe Up: Desktop
  • Two Finger Swipe Down: Mission Control

Sublime Text

สำหรับเจ้า Editor ตัวนี้ อย่างแรกเลยที่ต้องทำคือลง subl ใน command line

sudo ln -s /Applications/Sublime Text.app/Contents/SharedSupport/bin/subl /usr/bin/subl

ถัดมาลง Package Control และลงแพคเกจต่อไปนี้

  • ColorPicker
  • JSHint Gutter
  • SublimePythonIDE (ตัวนี้ดี แต่ทำ editor หน่วง)
  • EasyMotion
  • Emmet
  • tern_for_sublime (ผมก็ไม่แน่ใจว่ามันดีจริงป่าว)

สำหรับ config ผมใช้อันนี้

Slate

Slate เป็นแอพที่เอาไว้จัดหน้าจออัตโนมัติ ปกติแล้วเวลาผมทำงานจะเปิด chrome ประมาณ 80% จอ แล้วอีก 20% เป็น Twitica Desktop ซึ่งแต่ก่อนก็ต้องมาจัดจอเอง แล้วก็จะมีปัญหาว่าจัดแคบไป เว็บเข้า responsive design ซะอีก พอใช้ Slate แล้วก็สามารถกำหนดขนาดได้พอดี

ตัว config อยู่ที่ ~/.slate.js เขียนด้วย JavaScript ผมใช้อันนี้

ก็คือกด ctrl+1 จะจัด chrome ให้เป็น layout ตามที่บอกไว้ กด ctrl+2 จะให้ terminal โผล่ขึ้นมาและปรับเป็นขนาดมาตรฐาน 80 column และ ctrl+3 จะได้ grid สำหรับ resize app ซึ่งผม define ไว้ 2 ขนาดตามจอที่ผมใช้

Terminal

มาถึง part มันๆ กันสักที

ZSH

ถ้าไม่ใช้ zsh คุณพลาดแล้วแหละ ผมเองใช้ zsh มาได้หลายปีแล้ว แต่ก่อนใช้ grml แต่สมัยนี้จะใช้ oh-my-zsh ซึ่งของเล่นเยอะกว่า แต่ผมว่ามันช้ากว่าเยอะ

  1. ลง zsh: brew install zsh
  2. เปลี่ยน shell: chsh (ใส่เป็น /usr/local/bin/zsh)
  3. ลง oh-my-zsh: curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
  4. ปรับ ~/.zshrc ที่ผมใช้ก็จะมี
  • ZSH_THEME="agnoster" ถ้าใช้ธีมนี้ต้องลง font และปรับ terminal ให้ใช้ font นั้น และเซต DEFAULT_USER=whs ก่อนบรรทัด source
  • DISABLE_UNTRACKED_FILES_DIRTY="true"
  • plugins=(git brew composer django forklift git laravel4 mosh node npm osx pip sudo sublime) (บางอันเป็น autocomplete ครับ ที่น่าสนใจก็จะมี osx ซึ่งจะทำให้มีคำสั่ง quick-look เพื่อเปิดไฟล์ดูด่วนๆ ได้)
  • อื่นๆ
export PATH="/Users/whs/bin:/usr/local/opt/php56:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"`
export EDITOR=nano
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
alias mosh="LC_ALL=en_US.UTF-8 mosh"
alias bc="bc -l"
export ANDROID_HOME=/usr/local/opt/android-sdk/

Brew

ของเล่นเยอะแยะที่ควรลงครับ

brew install wget git gnupg graphviz mobile-shell mpv-player/mpv/mpv node ssh-copy-id youtube-dl
brew install ffmpeg --with-ffplay --with-freetype --with-libass --with-openssl --with-rtmpdump --with-theora --with-speex --with-tools
brew install imagemagick --with-fontconfig --with-webp --with-x11

ของที่ผมใช้ทำงาน (ซึ่งบางคนอาจจะไม่ได้ใช้เหมือนผม) ก็จะมี

brew install android-sdk ansible mariadb homebrew/php/php56 homebrew/php/php56-redis homebrew/php/phpmyadmin pypy python3 redis s3cmd
brew cask install intellij-idea android-studio firefox teamviewer

(ผมว่า Android Studio กับ IntelliJ มันซ้ำซ้อน แต่ในอนาคตถ้าไม่มี license นักศึกษาแล้วคงจะเลิกใช้ IntelliJ ก็เลยต้องใช้ทั้งคู่ไปก่อนแล้วตัดออกทีหลัง)

Git

อย่าลืม setup git

git config --global user.name "My Name"
git config --global user.email myemail+git@gmail.com
git config --global core.excludesfile ~/.gitignore_global
git config --global push.default simple

และใส่ในไฟล์ ~/.gitignore_global ว่า

.DS_Store

เพื่อ ignore .DS_Store ออกไป หรือจะมีไฟล์อื่นก็ใส่ที่นี่ได้ จะมีผลต่อทุก repository