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.bashrcatau.zshrcfunctions, direktori untuk menyimpan fungsi & aliasfish_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.