29.11.2021

Windows Terminal ve oh-my-posh

Daha önce Powershell komut satırını özelleştirme ile ilgili yazmıştım. Ama bu sefer daha gelişmiş bir terminal arayüzü için özellikle Scott Hanselman'ın videolarında ve blog'unda bahsettiği oh-my-posh (oh-my-bash benzeri) gibi bileşenleri ile ilgili yazacağım.

oh-my-posh'un kurmanın 2 yolu var:

1. PowershellGet:

Yönetici haklarıyla açılmış bir powershell penceresinde

PS> Install-Module oh-my-posh

yazmak. Bunun sonucunda önce PSGallery'ye güvenmek isteyip istemediğimizi soracak. 

2. Windows Paket Yöneticisi (winget). 2022'nin ikinci yarısından itibaren bu önerilen yöntem.

Komut satırından

PS> winget install JanDeDobbeleer.OhMyPosh

yazmak. Burada install'dan sonra gelen tam adı (aslında ID) yazabilmek için  önce içinde 

oh-my-posh yazan paketleri aratmak isteyebiliriz.

PS> winget search ohmyposh

Name       Id                      Version Match           Source
-----------------------------------------------------------------
Oh My Posh JanDeDobbeleer.OhMyPosh 6.18.1  Tag: oh-my-posh winget

Kurulumu tamamladık. Öncelikle kullanabileceğimiz temaları görelim.

PS> Import-Module oh-my-posh

PS> Get-PoshThemes

Burada listelenen temalardan birini seçtikten sonra bunu profil dosyamıza ekleyip kalıcı yapabiliriz. Ben jblab_2021 temasıyla ilerleyeceğim.

PS> notepad $PROFILE

ile profil dosyamızı açıp içine şu satırları ekleyelim (dosya yoksa yeni bir dosya yaratmamız gerekir).

Import-Module oh-my-posh

Set-PoshPrompt jblab_2021

(2023-02-07 Ek: Yeni sürümde $profile dosyasında şu satır ile yapılandırma öneriliyor:

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\mojada.omp.json" | Invoke-Expression

Sondaki  mojada, tercih edilen temanın adı.)

Aslında bu aşamadan önce yapılması gerekirdi ama yapılmazsa ne farkediyor diye görmek için sonra bıraktım. Varsayılan olarak kullanılan font aileleri sembol olarak kullanılan bazı karakterleri desteklemiyor. Bu amaçla özel bir font ailesi yüklememiz gerek. Scott Hanselman'ın videosunda gördüğüm nerdfonts.com sitesi güzel. Ben de bu siteden Caskaydia Cove Nerd Font ailesini yükledim. Zip dosyasını indirdikten sonra içindekileri Windows klasörünün içindeki Fonts klasörüne kopyalamak gerekecek. Ardından bu kullandığımız terminalde bu fontları görmek için ayarlardan tercih edilen font ailesi seçimini yapmamız gerek. Terminal derken yeni Windows Terminal'i de kuralım.

PS> winget install Microsoft.WindowsTerminal

Bu aşamadan sonra promptumuz tamamlandı. Eğer git kullanıyorsanız ve komut satırından git işlemleri için görsel destek arıyorsak ek olarak posh-git modülünü kurabiliriz.

PS> Install-Module posh-git

Git dışında başka faydalı özelliklerden biri Spotify'da çalan şarkı bilgisni komut satırı prompt'unda görmek olabilir. Bunu eklemek için cinnamon, jtracey93 veya night-owl gibi temalardan birini seçmek ya da mevcut temamızı Export-PoshTheme ile temanızı bir dosyaya yazmak ve sonra bu dosyı düzenleyerek içine bir Spotify segmenti eklememiz gerek.

Yeni farkettiğim başka bir faydalı özellik de PSReadline için geçmişe dayalı tahmin özelliği. Bunu etkinleştirmek için

PS> Set-PSReadlineOption -PredictionSource History

Yapmak yeterli. Bunu elbette her açılan terminal penceresinde olmasını istiyorsak $Profile içine kaydetmeliyiz. PSReadline sürüm 2.1.0 veya üzeri gerekli. Şu an beta sürümünde bazı yeni özellikler de var, güncellemeleri kaçırmamak gerek.

2022-08-03 Ek: Bugün kontrol ettiğimde depolarda PSReadLine'ın 2.2.6 sürümünün olduğunu görüp

PS> Update-Module PSReadLine -Scope CurrentUser -Force -Verbose

ile güncelledim. (Yukarıda ilk yükleme adımlarında işlem yaptığım bilgisayar ile bu bilgisayar farklı, bunu unutmuşum. Bu sebeple Update-Module kullandım. winget ile yüklediysem winget ile update etmeliyim) Beklediğim özellik tahminlerin görüntülenme yöntemi için var olan Inline kipine ilave olarak ListView kipiydi. Bu özellik gelmiş. Profil dosyamı açarak içinde PSReadline seçeneklerini ayarladığım satırı şu şekilde değiştirdim:

PS> Set-PSReadLineOption -PredictionSource HistoryAndPlugin -PredictionViewStyle ListView

Çalışan powershell konsolunu kapatıp tekrar açtıktan sonra artık öneriler listelenmiş olarak geliyor. 

2022-08-08 Ek: oh-my-posh'u güncelledikten sonra her yeni powershell penceresinde şu mesaj görüntülenmeye başladı:

Hey friend

In an effort to grow oh-my-posh, the decision was made to no
longer support the PowerShell module. Over the past year, the
added benefit of the module disappeared, while the burden of
maintaining it increased.

However, this doesn't mean oh-my-posh disappears from your
terminal, it just means that you'll have to use a different
tool to install it.

All you need to do, is follow the migration guide here:

https://ohmyposh.dev/docs/migrating

Önerilen; artık Install-Module ile değil, winget ile yüklememiz. Evet yükledim, ama yine de bu mesaj çıkmaya devam ediyor. Powershell-core için modül klasörü Belgelerim\Powershell\Modules altında oh-my-posh klasörü altında yeni versiyonun klasörüne girdim ve oh-my-posh.psm1 dosyasını açtığımda dosyanın en üstünde bu mesajın görüntülenme yerinin burası olduğunu gördüm. Satırları # karakteri ile etkisiz hale getirdim.

# Write-Host @'
# Hey friend
#
# In an effort to grow oh-my-posh, the decision was made to no
# longer support the PowerShell module. Over the past year, the
# added benefit of the module disappeared, while the burden of
# maintaining it increased.
#
# However, this doesn't mean oh-my-posh disappears from your
# terminal, it just means that you'll have to use a different
# tool to install it.
#
# All you need to do, is follow the migration guide here:
#
# https://ohmyposh.dev/docs/migrating
# '@

---

Bonus; farklı kullanımlara sahip profil dosyası konumları:

Tüm kullanıcılar & tüm bilgisayarlar -       C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

Tüm Kullanıcılar & bu bilgisayar -    C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1

Bu kullanıcı & tüm bilgisayarlar -    C:\Users\UserName\Documents\WindowsPowerShell\profile.ps1

Bu kullanıcı & bu bilgisayar - C:\Users\UserName\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

---

https://bunchofthoughts.me/powershell-customization/
http://draith.azurewebsites.net/?p=386
https://itecnote.com/tecnote/powershell-unable-to-use-ihtmldocument2/
https://zimmergren.net/making-windows-terminal-look-awesome-with-oh-my-posh/
https://learn.microsoft.com/en-us/windows/terminal/tutorials/custom-prompt-setup
https://www.someoneelsescloud.com/episodes/level-up-your-command-line-with-oh-my-posh
https://scriptingchris.tech/posts/how-i-setup-my-powershell-development-environment/