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/