dotfiles/PowerShell/prompt.ps1
Kacper Donat ff71243908 woo, arch
2018-07-31 19:53:06 +02:00

124 lines
2.6 KiB
PowerShell

$script:bg = [System.ConsoleColor]::Black;
$script:fg = [System.ConsoleColor]::White;
$script:first = $true;
$script:last = 0;
function Get-If {
[CmdletBinding()]param(
$Condition,
$IfTrue,
$IfFalse
)
if ($Condition) {
$IfTrue
} else {
$IfFalse
}
}
New-Alias ?: Get-If
function Write-PromptFancyEnd {
Write-Host -NoNewline -ForegroundColor $script:fg
$script:bg = [System.ConsoleColor]::Black
$script:fg = [System.ConsoleColor]::White
}
if ($IsWindows) {
$script:separator = '\';
} else {
$script:separator = '/';
}
$global:PromptReplacementDirs = @{
$(?: $IsWindows $env:USERPROFILE $env:HOME) = '~'
}
function Write-PromptSegment {
param(
[Parameter(
Position=0,
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true
)][string]$Text,
[Parameter(Position=1)][System.ConsoleColor] $Foreground = [System.ConsoleColor]::White,
[switch] $NoSegment
)
Write-Host $text -NoNewline -ForegroundColor $Foreground
if (-not $NoSegment) {
Write-Host -NoNewline -ForegroundColor $Foreground
}
$script:fg = $Foreground;
}
function Get-FancyDir {
$location = $(Get-Location).ToString();
foreach($replacement in $global:PromptReplacementDirs.GetEnumerator()) {
$location = $location.Replace($replacement.Name, $replacement.Value);
}
return $location.Replace($script:separator, '  ');
}
function Get-GitBranch {
$HEAD = Get-Content $(Join-Path $(Get-GitDirectory) HEAD)
if($HEAD -like 'ref: refs/heads/*') {
return $HEAD -replace 'ref: refs/heads/(.*?)', "$1";
} else {
return $HEAD.Substring(0, 8);
}
}
function Write-PromptStatus {
if($script:last) {
Write-PromptSegment ' ✔ ' Green
} else {
Write-PromptSegment "$lastexitcode " Red
}
}
function Write-PromptUser {
if($global:admin) {
Write-PromptSegment ' ADMIN ' Red
}
}
function Write-PromptVirtualEnv {
if($env:VIRTUAL_ENV) {
Write-PromptSegment " $(split-path $env:VIRTUAL_ENV -leaf) " Cyan
}
}
function Write-PromptDir {
Write-PromptSegment " $(Get-FancyDir) " Gray -NoSegment
}
# Depends on posh-git
function Write-PromptGit {
# if(Get-GitDirectory) {
# Write-PromptSegment "  $(Get-GitBranch) " Blue
# }
}
function prompt {
$script:last = $?;
$script:first = $true;
Write-PromptStatus
Write-PromptUser
Write-PromptVirtualEnv
Write-PromptGit
Write-PromptDir
Write-PromptFancyEnd
return ' '
}