Skip to content

Instantly share code, notes, and snippets.

@NachtgeistW
Last active August 20, 2021 09:43
Show Gist options
  • Save NachtgeistW/f394ca3e461edb40550a3f59445c61f2 to your computer and use it in GitHub Desktop.
Save NachtgeistW/f394ca3e461edb40550a3f59445c61f2 to your computer and use it in GitHub Desktop.
A bit like Arcaea style PowerShell theme, based on Darkblood
#requires -Version 2 -Modules posh-git
function Write-Theme {
param(
[bool]
$lastCommandFailed,
[string]
$with
)
# First Line
$prompt = Write-Prompt -Object ([char]::ConvertFromUtf32(0x250C)) -ForegroundColor $sl.Colors.PromptSymbolColorUpper
# Host
$user = $sl.CurrentUser
$computer = $sl.CurrentHostname
$prompt += Write-UpperSegment -content "$user@$computer" -foregroundColor $sl.Colors.HostForegroundColor
# Current path
$prompt += Write-Prompt -Object $sl.PromptSymbols.SegmentBackwardSymbol -ForegroundColor $sl.Colors.PromptSymbolColorUpper
$path += Get-FullPath -dir $pwd
$prompt += Write-Prompt -Object $path -ForegroundColor $sl.Colors.PathForegroundColor
$prompt += Write-Prompt -Object $sl.PromptSymbols.SegmentForwardSymbol -ForegroundColor $sl.Colors.PromptSymbolColorUpper
# Version Control Status<git:branchname status>
$status = Get-VCSStatus
if ($status) {
$vcsInfo = Get-VcsInfo -status ($status)
$prompt += Write-Prompt -Object "-$($sl.PromptSymbols.SegmentBackwardSymbol)" -ForegroundColor $sl.Colors.PromptSymbolColorUpper
$prompt += Write-Prompt -Object "git:$($vcsInfo.VcInfo)" -foregroundColor $sl.Colors.GitForegroundColor
$prompt += Write-Prompt -Object $sl.PromptSymbols.SegmentForwardSymbol -ForegroundColor $sl.Colors.PromptSymbolColorUpper
}
$prompt += ''
# SECOND LINE
$prompt += Set-Newline
$prompt += Write-Prompt -Object ([char]::ConvertFromUtf32(0x2514)) -ForegroundColor $sl.Colors.PromptSymbolColorLower
#check the last command state and indicate if failed
if ($lastCommandFailed) {
$prompt += Write-LowerSegment -content $sl.PromptSymbols.FailedCommandSymbol -foregroundColor $sl.Colors.CommandFailedIconForegroundColor
}
#check for elevated prompt
if (Test-Administrator) {
$prompt += Write-LowerSegment -content $sl.PromptSymbols.ElevatedSymbol -foregroundColor $sl.Colors.AdminIconForegroundColor
}
# Current time
$prompt += Write-LowerSegment -content $(Get-Date -Format HH:mm:ss) -ForegroundColor $sl.Colors.TimeForegroundColor
# Virtual environment
if (Test-VirtualEnv) {
$prompt += Write-LowerSegment -content "env:$(Get-VirtualEnvName)" -ForegroundColor $sl.Colors.VirtualEnvForegroundColor
}
if ($with) {
$prompt += Write-Prompt -Object "$($sl.PromptSymbols.SegmentForwardSymbol) $($sl.PromptSymbols.SegmentBackwardSymbol)" -ForegroundColor $sl.Colors.PromptSymbolColor
$prompt += Write-Prompt -Object "$($with.ToUpper())" -ForegroundColor $sl.Colors.WithForegroundColor
}
$prompt += Write-Prompt -Object "$($sl.PromptSymbols.PromptIndicator)" -ForegroundColor $sl.Colors.PromptSymbolColorLower
$prompt += ' '
$prompt
}
# Use these function to write <>-
function Write-UpperSegment {
param(
$content,
$foregroundColor
)
$prompt += Write-Prompt -Object $sl.PromptSymbols.SegmentBackwardSymbol -ForegroundColor $sl.Colors.PromptSymbolColorUpper
$prompt += Write-Prompt -Object $content -ForegroundColor $foregroundColor
$prompt += Write-Prompt -Object "$($sl.PromptSymbols.SegmentForwardSymbol)-" -ForegroundColor $sl.Colors.PromptSymbolColorUpper
return $prompt
}
function Write-LowerSegment {
param(
$content,
$foregroundColor
)
$prompt += Write-Prompt -Object $sl.PromptSymbols.SegmentBackwardSymbol -ForegroundColor $sl.Colors.PromptSymbolColorLower
$prompt += Write-Prompt -Object $content -ForegroundColor $foregroundColor
$prompt += Write-Prompt -Object "$($sl.PromptSymbols.SegmentForwardSymbol)-" -ForegroundColor $sl.Colors.PromptSymbolColorLower
return $prompt
}
$sl = $global:ThemeSettings #local settings
$sl.PromptSymbols.PromptIndicator = '>'
$sl.PromptSymbols.SegmentForwardSymbol = '>'
$sl.PromptSymbols.SegmentBackwardSymbol = '<'
$sl.PromptSymbols.PathSeparator = '\'
$sl.PromptSymbols.FailedCommandSymbol = [char]::ConvertFromUtf32(0x274C)
$sl.Colors.PromptForegroundColor = [ConsoleColor]::Blue
$sl.Colors.PromptSymbolColorUpper = [ConsoleColor]::White
$sl.Colors.PromptSymbolColorLower = [ConsoleColor]::Magenta
$sl.Colors.HostForegroundColor = [ConsoleColor]::Green
$sl.Colors.PathForegroundColor = [ConsoleColor]::Blue
$sl.Colors.GitForegroundColor = [ConsoleColor]::Magenta
$sl.Colors.WithForegroundColor = [ConsoleColor]::Yellow
$sl.Colors.WithBackgroundColor = [ConsoleColor]::Magenta
$sl.Colors.TimeForegroundColor = [ConsoleColor]::Green
$sl.Colors.VirtualEnvForegroundColor = [System.ConsoleColor]::Blue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment