Windows Terminal jest już z nami od dawna, ta nowoczesna aplikacja opracowana przez Microsoft, umożliwia uruchamianie różnych rodzajów powłok (shelli) i interfejsów wiersza poleceń.
Windows Terminal oferuje obsługę takich narzędzi jak: Windows PowerShell, PowerShell, wiersz poleceń (CMD) czy dystrybucje Linuksa (WSL).
Jednak potęga tej aplikacji tkwi w możliwośćiach jej konfiguracji i dostosowania. Zarówno skróty, zakładki (karty) czy wygląd można dostosować dla siebie i to nie zależnie czy jesteś programistą, administratorem czy bardziej zaawansowanym użytkownikiem.
Najlepszym narzędziem służącym do personalizacj prompta w Windows Terminal jest aplikacja oh-my-posh.
Jak zainstalować oh-my-posh w Windows Terminal? W jaki sposób dodać oh-my-possh do PowerShell?
oh-my-posh to aplikacja do personalizacji i ulepszania wyglądu terminala poprzez dodawanie zaawansowanych, konfigurowalnych promptów (wyświetlanych linii w wierszu poleceń). Działa z popularnymi powłokami, takimi jak PowerShell, bash, zsh, i jest kompatybilna z różnymi terminalami, w tym z naszym Windows Terminal.
Konfiguracja „całości” polega na instalacji czcionki która obsłguje dodatkowe znaki używane przez prompt, instalacji samej aplikacji oh-my-posh, zmianie ustawień aplikacji obsługującej wiersz poleceń oraz konfiguracji profilu używaneje przez nas powłoki.
W naszym wypadku będzie to powłoka PowerShell w wersji 7 i Windows Terminal.
Zaczynamy od czcionki, oh-my-posh zaleca jedną z czionek znajdującą się pakiecie NerdFonts, w naszym wypadku będzie to: Cascadia Cove NF Czcionki pobieramy bezpośrednio ze strony NerdFontshttps://www.nerdfonts.com/font-downloads
Pobrane czcionki rozpakowujemy i instalujemy w naszym systemie operacyjnym:
Możemy to zrobić używając do tego celu poniższego skryptu PowerShell. UWAGA w przypadku instalacji czcionki z poziomu wiersza poleceń, nie wystarczy jej skopiować do katalogu C:\Windows\Fonts – należy również dodać stosowny wpis do rejestru – szczegóły w poniższym skrypcie:
#font pack URL
$fontsurl = "https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/CascadiaCode.zip"
#creating a temporary folder for fonts
New-Item -Name tmpfonts -Path $env:TEMP -ItemType Directory
#font pack download
$file = $env:TEMP + "\tmpfonts\font.zip"
Invoke-WebRequest $url -OutFile $file
#font copy and register
$fontspath = $env:SystemRoot + "\Fonts"
Expand-Archive -Path $file -DestinationPath $($env:Temp + "\tmpfonts") -Force
Copy-Item "$($env:Temp+ "\tmpfonts")\CaskaydiaCoveNerdFont-Regular.ttf" -Destination $fontspath -Force
New-ItemProperty -Name "CaskaydiaCove NF" -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -PropertyType string -Value "CaskaydiaCoveNerdFont-Regular.ttf"
Kolejnym krokiem jest instalacja niezbędnych aplikacji. Sam Windows Terminal jest dostepny domyślnie w Windows 11 i Windows Server 2025 ale gdy macie starsze wersje jego instalacje opisaliśmy wcześniej.
W naszym przykładzie będziemy chcieli używać powłoki PowerShell 7 a ją należy wcześniej zainstalować ze sklepu Microsoft :
instalcji PS7 możemy również dokonać z użyciem wiersza poleceń. UWAGA: jest to jedyna opcja gdy Microsoft Store jest nie dostępny a jest tak w Windows Server 2025. Proces instalacj wykonujemy poleceniem winget
winget install --id Microsoft.Powershell --source winget
Kolejnym etapem jest instalacja aplikacji oh-my-psh ze sklepu Microsoft:
tutaj również możemy wykonać instalacje z poziomu Windows Terminala używając winget:
winget install --id JanDeDobbeleer.OhMyPosh --source winget
Następnie modyfikujemy ustawienia dotyczące czcionek w aplikacji Windows Terminal. Po jej uruchomieniu przechodzimy do ustawień i zmieniamy domyślną czcionkę w na zainstalowana wcześniej CaskaydiaCove NF
ten proces możemy równieże wykonać edytując sam plik ustawień Windows Terminal czyli settings.json, plik ten znajduje się w lokalziacji:c\users\user\APPDATA\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
"defaults":
{
"font":
{
"face": "CaskaydiaCove NF"
}
},
Ostatnim krokiem konfiguracji jest modyfikacja ustawień profilu PowerShell oraz profilu Windows PowerShell tak aby przy starcie sesji uruchamiał aplikacje oh-my-posh. Modyfikacja polega na dodaniu do obu profili wpisu o treści:
oh-my-posh init pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression
a profile obu wersji PowerShell znajdują się w poniższych ścieżkach. Uwaga: jeżeli pliki nie istnieją należy je utworzyć:C:\Users\user\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
C:\Users\user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Mamy zainstalowaną czcionkę, mamy PowerShell’a 7 i zainstalowaliśmy również oh-my-posh. W ustawieniach Windows Terminal zmieniliśmy czcionkę domyślną na nową, wyedytowaliśmy również nasze profile PowerShell.
Konfiguracje mam zatem gotową sprawdźmy jak wygląda nasz Windows Terminal uruchamiając go ponownie…
Nasz prompt w podstawowej konfiguracji oh-my-posh wskazuje użytkownika który uruchamia sesje, katalog w którym przebywamy, jest gotowy do obsługi github oraz informuje nas czy wcześniejsze polecenie wykonało się poprawnie.
Na tym jednak nie koniec przygody z oh-my-posh, ponieważ prompt można dalej konfigurować wskazując mu jedną z dostępnych na starcie skrórek. A samo pole do konfiguracji jest olbrzymie ponieważ parametry można edytować samodzielnie:
każdy znajdzie cośdla siebie a jeżeli chciałby mieć swoją własną wersje…..to już materiał na oddzielny wpis:
Co w przypadku gdybyśmy chcieli zautomatyzować cały proces konfiguracji? Tak, aby siadając do nowego środowiska automatycznie wykonać powyższe kroki i błyskawicznie przygotować Windows Terminal zgodnie ze swoimi przyzwyczajeniami.
Na to mamy oczywiście sprawdzony sposób – w postaci skryptu. Wszystkie powyższe kroki udało mi się zestawić w jeden skrypt instalacyjny. Skrypt ten umieszczony w zewnętrznym repozytorium i pozwala mi błyskawicznie przygotować nowy Windows Terminal do swoich przyzwyczajeń używając tylko internetu i zapamiętanego adresu.
Skrypt znajdziecie poniżej a jego aktualną wersje w moim repozytorium GitHub.
Skrypt wywołujem w nowym środowisku z użyciem polecenia Invoke-RestMethod odwołując się do repozytorium i zapisując go lokalnie. Nie musze go nawet kopiować! Następnie uruchamiamy, ze względu na edycje profilu PowerShell proponuje uruchomić go w ISE (tak ISE też ma swój profil ale go nie zmieniamy):
#Windows Terminal Oh My Posh and PowerShell 7 install by sprawdzone.it
# full automate configure Oh My Posh on Windows Terminal
# 1. download and install font
# 2. install PowerShell 7
# 3. install oh my posh
# 4. update Windows PowerShell and PowerShell 7 profiles
# 5. update settings file
#region font
Clear-Host
Write-Host "Installing font"
#font pack URL
$fontsurl = "https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/CascadiaCode.zip"
#creating a temporary folder for fonts
New-Item -Name tmpfonts -Path $env:TEMP -ItemType Directory
#font pack download
$file = $env:TEMP + "\tmpfonts\font.zip"
Invoke-WebRequest $fontsurl -OutFile $file
#font copy and register
$fontspath = $env:SystemRoot + "\Fonts"
Expand-Archive -Path $file -DestinationPath $($env:Temp + "\tmpfonts") -Force
Copy-Item "$($env:Temp+ "\tmpfonts")\CaskaydiaCoveNerdFont-Regular.ttf" -Destination $fontspath -Force
New-ItemProperty -Name "CaskaydiaCove NF" -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -PropertyType string -Value "CaskaydiaCoveNerdFont-Regular.ttf"
#cleaning after font pack
Remove-Item -Path $($env:Temp + "\tmpfonts") -Recurse -Force
#endregion
#region app
Clear-Host
Write-Host "Installing apps"
$id = "Microsoft.Powershell"
winget list -q $id --source winget | Out-Null
if ($?) {
Write-Host "$id is installed."
}
else {
Write-Host "Installing $id"
winget install --id $id --silent --accept-source-agreements --accept-package-agreements --source winget
}
Clear-Host
$id = $null
$id = "JanDeDobbeleer.OhMyPosh"
winget list -q $id --source winget | Out-Null
if ($?) {
Write-Host "$id is installed."
}
else {
Write-Host "Installing $id"
winget install --id $id --silent --accept-source-agreements --accept-package-agreements --source winget
}
#endregion
#region profile
Clear-Host
Write-Host "Updating PWSH and PS profile"
#required command in profile for oh-my-posh
$profileline = "oh-my-posh init pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression"
#paths for profiles
$pwshprofile = $($home + "\Documents\PowerShell\Microsoft.PowerShell_profile.ps1")
$psprofile = $($home + "\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1")
$pwsh = Test-Path -Path $pwshprofile
$ps = Test-Path -Path $psprofile
#adding command into pwsh profile
if (! $pwsh) {
New-Item -path $pwshprofile -type File -force
Add-Content -Path $pwshprofile -Value $profileline
}
else
{ Add-Content -Path $pwshprofile-Value $profileline }
#adding command into ps profile
if (! $ps) {
New-Item -path $psprofile -type File -force
Add-Content -Path $psprofile -Value $profileline
}
else
{ Add-Content -Path $psprofile-Value $profileline }
#endregion
#region WT settings file
Clear-Host
Write-Host "Updating Windows Terminal Settings"
#path for JSON settings file
$settingsfile = $env:USERPROFILE + "\APPDATA\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
$settings = Test-Path $settingsfile
#start terminal - to create settings file if not exist
if (! $settings) {
#start terminal - to create settings file when not exist
Write-Host "Restarting Windows Terminal"
start wt.exe
Start-Sleep 3
Stop-Process -Name WindowsTerminal -Force
Start-Sleep 3
}
Write-Host "Updating settings file"
#get conntent settings json file - connvert json - add two key Font and Face - export to json
$settingsfile = $env:USERPROFILE + "\APPDATA\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
$json = Get-Content $settingsfile | ConvertFrom-Json
#add font to default profile
$json.profiles.defaults | Add-Member -NotePropertyName font -NotePropertyValue ([PSCustomObject]@{face = "CaskaydiaCove NF" })
#set default profile to PWSH
$json.defaultProfile = "{574e775e-4f2a-5b96-ac1e-a2962a402336}"
#export to json config
$json | ConvertTo-Json -Depth 10 | Set-Content $settingsfile
#endregion
Clear-Host
Write-Host "Windows Terminal is ready"
Cały proces instalacji zajmuje max 2 minuty w zależności od prędkości łącza – możecie go zobaczyć poniżej:
Czy to już koniec? Wydaj się że nie macie sprawdzony sposób na w pełni automatyczne przygotowanie środowiska Windows terminal, zaczynacie przygodę z Oh My Posh a przed wami automatyzacja dodawania własnych kart czy nawet instalacja WSL
Jeżeli mój wpis Ci się spodobał, pomógł w pracy? Chcesz mnie wspierać? Postaw kawę! To dzięki waszemu wsparciu nie ma reklam! Poniżej kod QR do płatności który jest jednocześnie linkiem do PayPal możesz też wpłacić BLIK z użyciem Przelewy24.pl