A theme engine for Powershell in ConEmu and Windows Terminal inspired by the work done by Chris Benti on PS-Config and Oh-My-ZSH on OSX and Linux (hence the name).
More information about why I made this can be found on my blog.
Features:
- Easy installation
- Awesome prompt themes for PowerShell in ConEmu
- Git status indications (powered by posh-git)
- Failed command indication
- Admin indication
- Current session indications (admin, failed command, user)
- Configurable
- Easily create your own theme
- Separate settings for oh-my-posh and posh-git
- Does not mess with the default Powershell console
You should use ConEmu or Windows Terminal to have a brilliant terminal experience on Windows.
You can install ConEmu using Chocolatey:
choco install ConEmuYou can also install it using Scoop via the extras bucket:
$ scoop search conemu
'extras' bucket:
conemu (18.xx.xx)
$ scoop install conemuWindows Terminal can be acquired from the Microsoft Store, the Windows Terminal repo, or via Chocolatey:
choco install microsoft-windows-terminalThe fonts I use are Powerline fonts, there is a great repository containing them.
I use Meslo LG M Regular for Powerline Nerd Font in my ConEmu setup together with custom colors. You can find my theme here.
In case you notice weird glyphs after installing a font of choice, make sure the glyphs are available (maybe they have a different location in the font, if so, adjust the correct $ThemeSettings icon). If it turns out the character you want is not supported, select a different font.
You need to use the PowerShell Gallery to install oh-my-posh.
Install posh-git and oh-my-posh:
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUserEnable the prompt:
# Start the default settings
Set-Prompt
# Alternatively set the desired theme:
Set-Theme AgnosterIn case you're running this on PS Core, make sure to also install version 2.0.0-beta1 of PSReadLine
Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheckTo enable the engine edit your PowerShell profile:
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
notepad $PROFILEAppend the following lines to your PowerShell profile:
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme ParadoxThe last command sets the theme for the console. Check the available themes list below.
List the current configuration:
$ThemeSettingsYou can tweak the settings by manipulating $ThemeSettings.
This example allows you to tweak the branch symbol using a unicode character:
$ThemeSettings.GitSymbols.BranchSymbol = [char]::ConvertFromUtf32(0xE0A0)Also do not forget the Posh-Git settings itself (enable the stash indication for example):
$GitPromptSettingsHide your username@domain when not in a virtual machine for the Agnoster, Fish, Honukai, Paradox and Sorin themes:
$DefaultUser = 'yourUsernameHere'Set-Theme: set a theme from the Themes directory. If no match is found, it will not be changed. Autocomplete is available to list and complete available themes.
Set-Theme paradoxShow-ThemeColors: display the colors used by the theme
Show-Colors: display colors configured in ConEmu
If you want to create a theme it can be done rather easily by adding a mytheme.psm1 file in the folder indicated in $ThemeSettings.MyThemesLocation (the folder defaults to ~\Documents\WindowsPowerShell\PoshThemes, feel free to change it).
The only required function is Write-Theme. You can use the following template to get started:
#requires -Version 2 -Modules posh-git
function Write-Theme
{
param(
[bool]
$lastCommandFailed,
[string]
$with
)
# enter your prompt building logic here
}
$sl = $global:ThemeSettings #local settingsFeel free to use the public helper functions Get-VCSStatus, Get-VcsInfo, Get-FormattedRootLocation, Get-ShortPath, Set-CursorForRightBlockWrite, Set-CursorUp, Set-Newline or add your own logic completely.
To test the output in ConEmu, just switch to your theme:
Set-Theme mythemeIf you want to include your theme in oh-my-posh, send me a PR and I'll try to give feedback ASAP.
Happy theming!
As it seems getting access to the stack information when using pushd/popd is sort of mission impossible from within a theme, you can use a workaround proposed by Jonathan Leech-Pepin. In your $PROFILE, add a variable that will act as a correctly scoped pointer to fetch the stack context:
$getStackContext = {Get-Location -Stack}Next, in your custom theme, access the information you want to display:
$stackCount = (&$getStackContext).countThis is caused by the ConsoleTitle functionality.
As explained by Andrew Stanton-Nurse it's linked to how terminals work with OSC codes.
The fix is to disable the ConsoleTitle functionality when in iTerm2 by adding the following snippet to your $PROFILE.
if($env:LC_TERMINAL -eq "iTerm2") {
$ThemeSettings.Options.ConsoleTitle = $false
}

















