3.08.2022

zsh

Linux kabuğu (shell) olarak zsh'i denemek istedim. Fedora kullandığım makineye şu satırla kurulum yaptım:

$ sudo dnf install zsh util-linux-user

util-linux-user paketi, varsayılan kabuğu zsh olarak kullanmamızı sağlayacak chsh'e sahip. Bu arada şu anda kullanılan shell'i öğrenmek istersek

$ echo $0

veya

$ echo $SHELL

kullanılabilir. Şu aşamada açtığımız ilk terminal hala varsayılan kabuğu (çoğu durumda bash) kullanıyor olacaktır. zsh'e geçmek için ya terminalde zsh yazıp elle giriş yapmamız lazım, ya da terminal'i açar açmaz zsh'in gelmesi için chsh'i kullanmamız lazım:

$ chsh -s $(which zsh)

Bunu sudo/root ile çalıştırmaya falan gerek yok. Sadece kendi kabuğumuzu değiştiriyoruz. Dolayısıyla mevcut kullanıcının parolasını girmemizi isteyecek. Bundan sonra bir kez oturumu kapatıp tekrar açmak gerek.

chsh kullanmayan başka bir yöntem ise usermod'u kullanmak:

$ sudo usermod -s $(which zsh) $(whoami)

Bir sonraki oturum açılışında artık varsayılan kabuğumuz zsh olacak. İlk açılışta da bir yapılandırma ekranı bizi karşılayacak.

zsh, aynı bash gibi profilin altında .zshrc adındaki bir yapılandırma dosyasına ihtiyaç duyar. Bu ekran, bu yapılandırma dosyasının olmaması durumunda çıkıyor. zsh'i yanlışlıkla çalıştıranlar ve henüz bir .zshrc dosyası oluşturmadan çıkmak isteyenler için (q) seçeneği makul. Eğer boş bir yapılandırma dosyası oluşturup devam etmesini istiyorsak (0)ı, ya da tam gaz yapılandırmaya geçmek için (1)i seçmemiz gerek. Bu durumda sıradaki ekranımız şöyle olacak:

Ben bu ekranda (1) ile komut geçmişi, (2) ile komut tamamlama sistemi, (3) ile tuşların işlervlerini yapılandırabilir ve (4)e basarak diğer bazı ayarları (1), (2), (3) ve (5)'i (s)ye basarak ayarlıyorum. Her ekrandan da (0)a basarak ayarlarımı hatırlamasını ve nihayetinde yukarıdaki ekrana döndüğümde de (0) seçeneği için açıklama "boş bir .zshrc dosyası oluşturup çıkmak" yerine "ayarları kaydederek çık"a dönüştüğünde bu seçenek ile ayarları kaydedip çıkmayı seçiyorum.

İşler bittiğinde yukarıdaki gibi bir ekran ile karşılaşıyorum. Aslında prompt'ta sadece değişen $ karakterinin yerine % karakterinin gelmiş olmasının dışında bir fark gözükmüyor.

Bu arada yukarıda yazan birkaç açıklamaya vurgu yapalım; bu çalışan karşılama ekranını tekrar çalıştırmak için

$ autoload -Uz zsh-newuser-install
$ zsh-newuser-install -f

yazabiliriz. Ayrıca .zshrc yapılandırma dosyasında 

# Lines configured by zsh-newuser-install
# End of lines configured by zsh-newuser-install

satırları arasına müdahale etmememiz, yapaacğımız değişiklikleri bu satırlar dışına eklememiz önerilmiş.

Bu noktada sade bir zsh'ımız oldu. Hiçbir ek bileşene ihtiyaç duymadan prompt'umuzu özelleştirmek mümkün. Ev klasörümüzde yer alan .zshrc dosyasını açık için şu satırları yazalım:

autoload -Uz promptinit
promptinit
prompt bart

Autoload, zsh ile gelen bir betik çalıştırıcı. Bu satırlarda prompt'umuz için mevcut temalardan bart'ı seçmiş olduk. Tüm temaları görmek için

$ prompt -l

(her promptun örneğini görmek için -p de olur) veya mevcut temayı görmek için

$ prompt -c

kullanabiliriz. Karşılaştığım sorunlardan biri ctrl+ok tuşlarının kelime atlama yapmaması. ctrl+ok tuşları ile bir önceki kelime başına veya bir sonraki kelime başına atlamak istersem terminale ";5D" ve ";5C" yazılıyor. Bunu düzeltmek için .zshrc dosyasına aşağıdaki satırları ekleyerek çözebildim:

bindkey ";5D" backward-word
bindkey ";5C" forward-word
bindkey "^W" backward-delete-word

Benzer şekilde Home tuşuyla satırın başına, End tuşuyla sonuna gitmek ve Del tuşu ile silebilmek için

bindkey "^[[H" beginning-of-line
bindkey "^[[F" end-of-line
bindkey "^[[3~" delete-char

Son satır Ctrl+w kısayolu ile önceki sola doğru bir kelime silmek için.

Biraz daha renklendirmek için oh-my-zsh kurmayı tercih ediyorum. curl kullanarak

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

ya da git clone ile

$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

ilgili dosyaları aldıktan sonra profil klasörümüzün altında .oh-my-zsh gizli klasörü oluşacak. oh-my-zsh bize hazır bazı temalar getirecek. Curl yöntemini seçtiysek .zshrc dosyasına varsayılan tema da girilmiş olacak. git clone yaptıysak bu işi el ile yapmamız gerekecek. Mevcut temalara göz atmak için projenin github sayfasına bakabiliriz. Bir tema seçtikten sonra .zshrc dosyasına 

ZSH_THEME="duellj"

gibi bir tema adı yazmak, temamızı her açtığımızda rastgele değişecek şekilde belirlemek için

ZSH_THEME="random"

ya da belli birkaç temanın içinden rastgele seçmek için

ZSH_THEME_RANDOM_CANDIDATES=( "duellj" "agnoster" )

yapılabiliyor.

zsh'i güzel yapan şeylerden biri de eklentileri. Çok kullanılan 2 güzel eklenti Fedora'nın depolarında mevcut. Kurmak için

$ sudo dnf install zsh-autosuggestions zsh-syntax-highlighting

yazmak yeterli. Kurulum sonrası bu iki eklentiyi yapılandırmamıza dahil etmek için yine .zshrc dosyasını açıp son satıra şu satırları eklemek gerek:

# plugins
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Bu eklentilere ek olarak zsh-Z, fsf de kullanılabilir. Bu şekilde source komutu ile eklentileri .zshrc'ye dahil etmek, oh-my-zsh öncesi yöntem. oh-my-zsh kullanırken daha kolay bir yöntem var; eklentilerin ~/.oh-my-zsh/plugins klasörünün altına yerleştirildiğini varsayarsak bu plugin'lerin isimlerini plugins=(...) satırında parantes içine boşlukla ayrılmış dizi şeklinde yazabiliriz. Örneğin zsh-autosuggestions'ın nereye kurulduğuna bakmak için

$ rpm -ql zsh-autosuggestions

yazdığımda /usr/share/zsh-autosuggestions klasörne kurulduğunu gördüm. Şunun gibi yaparak bu plugin'i oh-my-zsh'in plugin klasörüne kopyalayabiliriz:

$ cp /usr/share/zsh-autosuggestions ~/.oh-my-zsh/plugins -r

Bu noktadan sonra şu mümkün:

plugins=(zsh-autosuggestions)

Oh-my-zsh ile gelen plugin'ler de faydalı olabilir. Herhangi bir plugin'i etkinleştirmek için .zshrc dosyasına

plugins=(rails git ruby)

gibi isimlerini yazmak gerek.

oh-my-zsh ile birlikte gelen temaları terminalden görmek istersek (2023-04-07)

$ omz theme list

ve hatta bu temalardan birini kullanmaya başlamak için ise

$ omz theme set duellj

yazılabilir. Ayrıca plugin'leri etkinleştirmek için de

$ omz plugin enable

Bu komutlar sadece mevcut oturumda prompt'u değiştirmekle kalmaz, .zshrc dosyasında da gerekli değişiklikleri yaparak sonraki oturumlarda da geçerli olmasını sağlar.

Görselliğe seviye atlatacak powerlevel10k temasını yüklemek için ise

$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
$ echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

yazabiliriz. En son satırdaki echo ile source'u .zshrc'ye ilave etmek yerine aşağıdakini de yapabiliriz

ZSH_THEME="powerlevel10k/powerlevel10k"

Niye 2 kere powerlevel10k yazdık? Çünkü profil klasörümüzün içinde powerline10k klasörünün içindeki powerlevel10k dosyasını göstermeye çalışıyoruz.

Powerlevel10k'in github sayfasında özel bir fonta ihtiyaç duymadığı, ama ek karakterlere sahip bir font ailesinin avantajlarını kullanabileceği yazılmış. Dolayısıyla şu fontlardan birini kullanmak isteyebiliriz:

Nerd Fonts,  

Source Code Pro,  

Font Awesome

Powerline

Powerlevel10k'yı etkinleştirdikten sonraki ilk açılışta aşağıdaki gibi bir ekran ile karşılaşacağız.

Görülebileceği gibi seçili fontlar ile bazı karakterleri göstermeyi deniyor ve bunların uygun şekilde gözüküp gözükmediği konusunda kullanıcıdan bir geri dönüş bekliyor. Diamond için hadi neyse, ama bir sonraki ekrandaki asma kilit sembolü için Fedora'nın varsayılan sabit genişlikli fontu monospace yeterli olmadı. Şu sayfada anlatıldığı gibi powerlevel10k-media reposundaki fontları indirdim.

 
$ cd $HOME/Downloads
$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf
$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf
$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf
$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf

Kurmak için Gnome fonts uygulaması ile açtıktan sonra sağ üst köşedeki Kur düğmesine bastım. Kurultuktan sonra bu düğme pasif hale geldi.


powerlevel10k'i tekrar yapılandırmak istersek

$ p10k configure

çalıştırmak gerek.

---

https://github.com/rothgar/mastering-zsh/blob/master/docs/config/general.md

https://dev.to/voracious/a-guide-to-customizing-the-zsh-shell-prompt-2an6

Hiç yorum yok: