Waktunya Migrasi ke Fish Shell

Aditya Phra

Setelah pemakaian fish selama seminggu, aku akhirnya memutuskan untuk all in ke fish shell karena fitur autosuggestions, tab completions, dan syntax highlighting yang sudah jadi fitur default.

Jadi, tidak perlu ribet lagi menginstal plugin satu per satu seperti yang aku lakukan sebelumnya di zsh dan bash.

Instalasi

Instalasi fish sesuaikan dengan paket manager yang kamu pakai sekarang, kalau di Arch Linux tinggal:

sudo pacman -S fish

Ganti default shell:

chsh -s /usr/bin/fish

Kalau tanpa mengganti default shell bisa dengan mengedit file ~/.bashrc kemudian isi dengan:

exec fish

Konfigurasi Awal

Biasanya aku langsung mematikan fitur kata sambutan yang muncul setiap kali membuka fish:

set -U fish_greeting

Kalau kamu mau mengganti skema warna dan format prompt fish bisa memakai editor konfigurasi web yang harus diaktifkan dengan:

fish_config

Nanti langsung membuka editor konfigurasi versi web di browser.

Prompt yang biasanya kupakai sebelumnya di zsh dan bash itu starship, yang mantapnya bisa juga dipakai di fish shell.

Konfigurasi Fish

File konfigurasi fish shell berada di direktori ~/.config/fish:

  • config.fish, fungsinya sama seperti file .bashrc atau .zshrc
  • functions, direktori untuk menyimpan fungsi & alias
  • fish_variables, file untuk menyimpan variabel universal (nanti dijelaskan)

Environment Variable

Deklarasi environment variable di fish shell agak berbeda, biasanya memakai export kalau di bash dan zsh, kalau di fish memakai set seperti ini:

set -gx EDITOR nano

Fungsi -g untuk mendeklarasi variable di global scope dan -x biar variabel dapat diakses oleh child process yang bisa disebut environment variable.

Namun, akses environment variable hanya ada di sesi di mana variabel dideklarasikan. Biar tersedia di setiap sesi shell, bisa memakai fitur variabel universal (-U) seperti ini:

set -Ux EDITOR nano

Atau bisa juga dengan menambahkan konfigurasi ini ke file ~/.config/fish/config.fish:

set -gx EDITOR nvim

Environment variable juga bisa dideklarasikan sementara untuk child process seperti di bash dan zsh:

PAGER=cat git log

Menambahkan PATH Baru

Menambahkan PATH baru biar program lokal bisa terdeteksi di shell penting, seperti yang aku lakukan sebelumnya di bash dan zsh.

Contoh ini untuk menambahkan /home/user/.local/bin ke PATH dengan fungsi fish_add_path:

fish_add_path /home/user/.local/bin

Cek PATH:

echo "$PATH"

Untuk menghapus /home/user/.local/bin dari PATH caranya dengan memodifikasi variabel universal fish_user_paths:

set -U fish_user_paths (string match -v /home/user/.local/bin $fish_user_paths)

Pada dasarnya fungsi fish_add_path itu membuat atau memodifikasi variabel universal fish_user_paths, jadi bisa dimodifikasi manual dengan set seperti yang di atas.

Alias dan Fungsi

Cara kerja alias di fish shell sangatlah berbeda dari bash dan zsh. Di fish sendiri alias itu sebenarnya fungsi, bisa dicoba sendiri:

alias --save rmi="rm -i"

alias di atas akan membuat file /home/user/.config/fish/functions/rmi.fish yang berisi fungsi:

function rmi --wraps='rm -i' --description 'alias rmi=rm -i'
    rm -i $argv
end

Fungsi itu bisa diedit langsung melalui shell:

EDITOR= funced rmi

Ketika editor terbuka untuk menambahkan Enter tekan Alt+Enter dan untuk menyimpan fungsi tekan Enter.

Setelah diedit, simpanlah fungsi ke file biar permanen:

funcsave rmi

Cara untuk menghapus fungsi tadi:

functions -e rmi
funcsave rmi

Konklusi

Sudah seperti itulah konfigurasi yang tambahkan ke fish shell, karena memang menambahkan alias dan environment variable sudah cukup untuk kebutuhanku.

Fitur fish lain yang layak dicoba itu mode privat yang berfungsi biar setiap perintah yang dijalankan tidak akan disimpan di histori dan akses ke histori juga tidak tersedia selama mode privat:

fish -P

Dan fitur terakhir yang layak dicoba, fitur abbr yang termasuk paradigma baru sebagai alternatif dari alias. Fitur ini mirip seperti alias, tetapi bisa edit perintahnya dulu sebelum dieksekusi.

Untuk plugin untuk fish juga ada, bisa memakai plugin manager fisher untuk mempermudah instalasi. Saat ini aku belum memakai plugin sama sekali, mungkin nanti aku bakalan pakai.

Kalau untuk scripting aku masih pakai bash untuk hal yang tidak terlalu kompleks (maksimal 100 baris kode lah), kalau yang agak kompleks aku mendingan pakai python saja karena bash itu bikin pusing kalau sudah banyak baris kodenya.

Sebagai penutup, aku merekomendasikan kamu belajar bahasa fish shell, ini bisa mempermudah kamu dalam membuat fungsi untuk alias, mudah dipelajari dari bash menurutku.