Desde siempre tuve ganas de customizar un poco la interfaz de PowerShell y logré avanzar algo, que sin duda trataré de ir actualizando.

Hasta ahora este es el resultado parcial:

Hasta ahora

Bastante simple por ahora, el formato es:

usuario-win at [usuario-git/repo;branch-actual]

y en los casos que no estemos en un repositorio, simplemente muestra el directorio actual.

Paso 1, tener una terminal

El primer paso es opcional, ya que Windows 10 viene con PowerShell ya pre-instalado. Pero pueden instalar otras terminales como ConEmu, Cmder, etc. En este caso, yo tengo instalada Fluent Terminal

Paso 2, git

Tener instalado GIT para tener los comandos cli necesarios.

Paso 3, el resto

Desde la terminal de PowerShell (Como Admin!), vamos a instalar Posh-Git, Get-ChildItemColor y lo necesario.

Activar las políticas para instalar paquetes
PS> Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force

Agregar a PSGallery como repositorio de confianza
PS> Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

Actualizar PowerShellGet, esto nos permite instalar las betas de los módulos (*Si no sólo podremos instalar los paquetes estables*)
PS> Update-Module PowerShellGet -Force

Ahora que tenemos todo lo global, podemos instalar lo demás con el scope del usuario, así que no necesitamos Administrador.

PS> Install-Module Posh-Git -Scope CurrentUser 
PS> Install-Module Get-ChileItemColor -Scope CurrentUser

Creamos un nuevo perfil de PowerShell (saltear si ya lo tenés)

PS> if (!(Test-Path -Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File}
PS> notepad $PROFILE

En el archivo agregamos, la función de prompt es de este gist

Import-Module Get-ChildItemColor #cargamos el módulo de colores en los listados

Set-Alias dir Get-ChildItemColor -option AllScope #alias dir
Set-Alias ls Get-ChildItemColorFormatWide -option AllScope #alias ls


function Prompt {
    $ExitCode = $LastExitCode

    $CurrentPath = Get-Path
    if ($CurrentPath.ToLower().StartsWith($Home.ToLower())) {
        $CurrentPath = "~" + $CurrentPath.SubString($Home.Length)
    }  

    Write-Host "$env:UserName" -NoNewline -ForegroundColor Green
    Write-Host " at " -NoNewline -ForegroundColor Yellow 

    if (Test-Path ".git") {
        $RemoteName = (git remote get-url origin) #devuelve el remote que despues sacamos algunas partes
        $CleanBranch = (git status --short) # devuelve si hay cosas pendientes para commitear
        $CurrentBranch = "local"

        Write-Host "[" -NoNewline -ForegroundColor Yellow

        if ($RemoteName) {
            $CurrentBranch = (git symbolic-ref --short HEAD)
            $RemoteName = $RemoteName.Split("/")
            $GitUser = ($RemoteName[-2]).Split(":")[1]
            $Title += "[$($RemoteName[-2])/$($RemoteName[-1])]"

            Write-Host $GitUser -NoNewline -ForegroundColor Magenta
            Write-Host "/" -NoNewline -ForegroundColor Yellow
            Write-Host $RemoteName[-1] -NoNewline
            Write-Host ";" -NoNewline -ForegroundColor Yellow
            if (-not ([string]::IsNullOrEmpty($CleanBranch))) {
                Write-Host "$CurrentBranch" -NoNewline -ForegroundColor Red
            } else {
                Write-Host "$CurrentBranch" -NoNewline -ForegroundColor Green
            }
        }
        else {
            $Title += "[LOCAL] "
            Write-Host "LOCAL" -NoNewline
        }

        Write-Host "] " -NoNewline -ForegroundColor Yellow
        $Title += "($CurrentBranch) "
    }
    else {
        Write-Host "$CurrentPath " -NoNewline
    } 

    $LastExitCode = $ExitCode
    "$('>' * ($NestedPromptLevel + 1)) "
    $Host.UI.RawUI.WindowTitle = $CurrentPath + $Title #actualizar el título
}

Import-Module Posh-Git  #Modulo de Posh-Git

Con esto ya tenemos el estado base de git junto al prompt y un buen pie para seguir modificándolo.

Helas