Dari zsh ke fish

avatar

Haikel, 3 min read / June 28, 2022

بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ

A. Pendahuluan

Seperti yang kita tahu, zsh(z-shell) adalah sebuah shell yang commandnya mirip-mirip dengan sh. Bisa dibilang ini sh versi improvement dengan berbagai macam kustomisasi. Belakangan ini, saya tertarik untuk pindah ke fish(friendly interactive shell), yang katanya udah banyak fitur out of the box. Di zsh, kita tidak akan mendapatkan itu dan yeps, mesti konfigurasi sendiri buat dapetin fitur kayak autocomplete, dan lainnya.

Mengapa saya pindah ke fish?

  • Penasaran fish kayak gimana. Banyak yang bilang lebih bagus dan cepat ketimbang zsh.
  • Seperti yang sudah saya bilang di awal, untuk mendapatkan berbagai fitur yang mempermudah hidup, kita mesti konfigurasi dulu si zsh. Kalo di fish, "katanya" sih ga perlu ngonfig lagi. Jadi tinggal pakai. Inilah yang membuatnya menarik.

B. Proses Migrasi

1. Instalasi fish

Disini saya pake distro ubuntu based.

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish

Untuk yang pake arch based, bisa install dengan perintah sudo pacman -S fish. Sebelum ngerubah default shellnya, mari kita cek si fish nya ada dimana:

~
 which fish
/usr/bin/fish

Seperti yang tertera, fish saya berada di /usr/bin/fish(tiap orang beda-beda, makanya cek dulu fish nya temen-temen ada dimana).

Ubah default shell ke fish:

chsh -s /usr/bin/fish

Kalo udah, tinggal logout dan login lagi untuk melihat perubahannya.

Oh ya soal konfigurasi, memang rada beda ama zsh. Untuk file confignya, bisa ditemukan di ~/.config/fish/config.fish. Berikut contoh konfigurasi fish saya:

~/.config/fish/config.fish
set -Ua fish_user_paths ~/flutter/bin
set -Ua fish_user_paths ~/Android/Sdk/cmdline-tools/latest/bin
# export PATH=$ANDROID_SDK_ROOT/bin:$PATH
 
# Golang
set -Ua fish_user_paths /usr/local/go/bin
 
# NodeJS fix Issues
# export NODE_OPTIONS=--openssl-legacy-provider
 
alias nv="~/.local/share/applications/Neovim/./nvim.appimage"
 
# set -Ua fish_user_paths SDKMAN_DIR="~/.sdkman"
# [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
 
# THEME PURE #
set fish_function_path /home/yuu/.config/fish/functions/theme-pure/functions/ $fish_function_path
source /home/yuu/.config/fish/functions/theme-pure/conf.d/pure.fish

Abaikan yang masih ada tulisan export nya. Ini awalnya konfigurasi zsh saya, kemudian saya pindahin ke fish. Dan masih sederhana juga. Namanya baru pindah yak, jadi menyesuaikan dulu.

Untuk lebih detailnya, bisa lihat ke repositori dotfiles saya

2. Instalasi oh-my-fish

oh-my-fish kurang lebih sama saja fungsinya dengan oh-my-zsh di zsh. Untuk menginstallnya, kita masukkan perintah:

curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish
oh-my-fish

Jika temen-temen mau ganti tema, bisa lihat daftarnya disini. Disini, saya akan mengganti tema defaultnya ke pure(yep pas di zsh, saya juga pake pure).

curl git.io/pure-fish --output /tmp/pure_installer.fish --location --silent
source /tmp/pure_installer.fish; and install_pure

Ganti directory /tmp/ dengan directory yang temen-temen inginkan.

Sedikit Demo, hehe :D

3. Uninstall zsh dan oh-my-zsh

Sebenarnya ini opsional, tapi karena default shellnya udah di fish, maka saya uninstall zsh beserta oh-my-zsh nya.

sudo apt --purge remove zsh
Uninstall zsh

Untuk uninstall oh-my-zsh, lakukan cara berikut:

  • Pergi ke direktori ~/.oh-my-zsh/tools/
  • Nah disitu ada file yang namanya uninstall.sh
  • Ubah filenya jadi executable dengan perintah sudo chmod 777 uninstall.sh
  • Kemudian uninstall oh-my-zsh dengan ./uninstall.sh
Uninstall oh-my-zsh

Dia bakal ngembaliin default shellnya ke sh. Dalam hal ini, kita rubah lagi ke fish dengan chsh -s /usr/bin/fish

C. Penutup

Yeps sekian aja catatan ini. So far aman, dan nyaman juga pake fish. Ga terlalu mikirin time execution juga sih seperti kata orang-orang, cuma murni pengen nyoba hal yang baru aja. Terima kasih 🌸

D. Referensi