Pablitus Prompt Framework (PPF) es un framework modular para construir prompts de PowerShell 7+ con una arquitectura clara, rápida y personalizable.
Separa la recolección de datos, la construcción del contexto, el middleware, los segmentos, la resolución de temas y el renderizado en capas independientes. Esto permite cambiar el aspecto del prompt sin reescribir la lógica que obtiene la información del sistema.
PPF funciona de forma local, no depende de servicios externos para renderizar el prompt y está diseñado para Windows, Linux y macOS.
- Arquitectura modular con responsabilidades separadas.
- 13 proveedores integrados para contexto, entorno y estado del sistema.
- 14 segmentos visuales reutilizables.
- 8 renderers de salida: Plain, Minimal, JSON, ANSI, PowerLine, Markdown, HTML y Rich.
- 14 temas integrados: Default, Nord, Dracula, Catppuccin, Kali, Pablitus, Pablitus Dark, Pablitus Light, Pablitus Neon, Pablitus Matrix, Pablitus Ocean, Pablitus Sunset, Pablitus Forest y Pablitus Cyberpunk.
- Bloques PowerLine truecolor para Dracula, Nord, Catppuccin y Kali.
- Segmento de hora con icono de reloj de Nerd Font (
U+F017). - Importación de temas personalizados sin modificar el repositorio.
- Bootstrap rápido que compila las fuentes modulares en una sola carga.
- Omisión opcional de proveedores cuyos segmentos están ocultos por el tema.
- Caché en memoria y en disco.
- Importación, exportación y recarga en caliente de configuración.
- Sistema de eventos para
BeforeRender,AfterRender,ThemeChanged,ConfigurationChangedyModuleLoaded. - Sampler de CPU respaldado por runspaces.
- Watcher de repositorios Git.
- Diagnóstico de salud, benchmarks y telemetría de rendimiento.
- Funcionamiento local, sin telemetría remota ni dependencia de APIs externas.
- Compatibilidad con Windows, Linux y macOS.
- Suite de pruebas con Pester y análisis estático con PSScriptAnalyzer.
PPF combina proveedores, segmentos, renderers y temas. Cada capa puede utilizarse de forma independiente o extenderse con la API pública.
Los proveedores recopilan información del sistema, del entorno de PowerShell o del directorio actual y la depositan en el PromptContext.
| Proveedor | Información |
|---|---|
Session |
Usuario, host, sistema operativo, shell y estado de elevación. |
WSL |
Detección de WSL y nombre de la distribución. |
Path |
Directorio actual, ruta abreviada y ruta relativa al home. |
Project |
Tipo de proyecto detectado: Node, Python, .NET, etc. |
Git |
Rama, commit, estado limpio/sucio, archivos sin seguimiento y ahead/behind. |
Docker |
Estado del daemon y cantidad de contenedores activos. |
Python |
Versión de Python y entorno virtual activo. |
Node |
Versión de Node.js y contexto del proyecto. |
DotNet |
Versión de .NET y archivos de proyecto. |
Kubernetes |
Contexto, namespace y estado de conexión. |
Battery |
Porcentaje de batería y estado de carga. |
CPU |
Porcentaje de uso de CPU. |
Memory |
Memoria total, disponible y porcentaje de uso. |
Los segmentos construyen los bloques visibles del prompt a partir del contexto.
SessionProjectPathGitPythonNodeDockerWSLBatteryCPUMemoryKubernetesDotNetTime
Cada tema puede ocultar, mostrar o reconfigurar cualquier segmento sin modificar el código del proveedor.
| Renderer | Salida |
|---|---|
Plain |
Texto plano sin códigos ANSI. |
Minimal |
Prompt corto con el directorio esencial. |
JSON |
Contexto y segmentos en JSON válido. |
ANSI |
Colores ANSI de 16 colores. |
PowerLine |
Bloques truecolor con separadores y diamantes. |
Markdown |
Texto con formato Markdown. |
HTML |
Segmentos envueltos en HTML con estilos. |
Rich |
Diseño de terminal con símbolos y estilos enriquecidos. |
El renderer PowerLine requiere una Nerd Font instalada y seleccionada en la terminal.
| Tema | Estilo | Paleta principal | Mejor caso de uso |
|---|---|---|---|
Default |
Base ANSI clásica | Cyan, Blue, Green, Yellow, Magenta, Red | Prompts sencillos y compatibles con cualquier terminal sin Nerd Font. |
Nord |
Polar Night, Frost y Aurora | #5e81ac, #434c5e, #a3be8c, #ebcb8b |
Escritorios oscuros con buena legibilidad y bloques PowerLine. |
Dracula |
Paleta oficial Dracula | #44475a, #6272a4, #ffb86c, #8be9fd, #ff79c6 |
Estilo oscuro clásico con alto contraste y silueta de Oh My Posh. |
Catppuccin |
Catppuccin Mocha | #cba6f7, #585b70, #fab387, #a6e3a1, #89b4fa |
Paleta pastel suave sobre fondo oscuro para sesiones largas. |
Kali |
Verde, cian y ámbar | #00a86b, #00838f, #ffc107, #ff9800, #9c27b0 |
Entornos de seguridad y auditoría con user@host visible. |
Pablitus |
PowerLine truecolor oscuro | #1e1e2e, #89b4fa, #a6e3a1, #f38ba8 |
Tema oficial de PPF: Session, Path, Git y Time con diamantes. |
Pablitus Dark |
PowerLine truecolor muy oscuro | #0a0a0a, #bb86fc, #03dac6, #ff5252 |
Fondos negros; transient prompt con right_template y filler. |
Pablitus Light |
PowerLine truecolor claro/neón | #fafafa, #ff00ff, #00e5ff, #00ff9f |
Terminales con tema claro; diamantes magenta, cian y naranja. |
Pablitus Neon |
PowerLine truecolor neón oscuro | #0a0a0a, #ff00ff, #00e5ff, #00ff9f |
Estilo neón vibrante sobre fondo oscuro; diamantes magenta, cian y verde. |
Pablitus Matrix |
PowerLine truecolor verde matriz | #000000, #00ff00, #33ff33 |
Estilo monocromo verde matriz; sesiones de hacking y terminales oscuros. |
Pablitus Ocean |
PowerLine truecolor azul océano | #0a192f, #64ffda, #1d3557, #233554 |
Desarrollo con rutas, Git y Docker; transient prompt y tooltips. |
Pablitus Sunset |
PowerLine truecolor atardecer | #2d1b19, #ef476f, #118ab2, #06d6a0 |
Sesiones nocturnas con tonos cálidos; right prompt con overflow: break. |
Pablitus Forest |
PowerLine truecolor verde bosque | #2e8b57, #98fb98, #8b4513 |
Ideal para entornos naturales y desarrollo outdoors; paleta verde bosque con estilo powerline. |
Pablitus Cyberpunk |
PowerLine truecolor neón | #0a0a0f, #ff00ff, #00ffff, #ffff00 |
Ideal para ciberseguridad y desarrollo nocturno; paleta neón magenta, cian y amarilla sobre fondo oscuro. |
Los temas PowerLine comparten la misma gramática visual de bloques, diamantes y glifos de Nerd Font, pero cada uno define su propia paleta, contraste y acentos. El segmento Time usa el icono de reloj de Nerd Font (U+F017).
PPF incluye herramientas para inspeccionar el estado del framework y medir su rendimiento.
Get-PromptHealth
Test-PromptFramework
Measure-Prompt
Measure-PromptDetailed
Measure-PromptCacheComparisonTambién se puede ajustar el nivel de logging:
Set-PPFLogLevel -Level "DEBUG"
Set-PPFLogLevel -Level "INFO"Niveles disponibles: TRACE, DEBUG, INFO, WARN y ERROR.
La telemetría local registra tiempos de providers, segmentos y renderers, además de estadísticas de caché. No se envía información a servicios externos.
PPF está organizado en capas con dependencias explícitas:
Core: ciclo de vida del prompt, registro, caché, eventos, telemetría y renderizado.Configuration: configuración, valores por defecto, importación/exportación y hot reload.Utils: utilidades para ejecución segura de comandos externos.Modules: providers, services y segments de cada capacidad.Themes: paletas, iconos y valores por defecto de los segmentos.Renderers: formatos de salida.Profileyexamples: integración opcional con perfiles y temas de ejemplo.tests: pruebas de regresión, integración y cobertura.
PablitusPrompt.psm1 lee las fuentes modulares en orden de dependencia, las concatena y las ejecuta una sola vez. Esto evita el coste de importar decenas de archivos pequeños sin perder la organización del código.
El modo activo se expone en:
$global:PPF_BootstrapModeValores posibles: Fast o Modular.
Para forzar el cargador modular, por ejemplo durante cobertura con Pester:
$env:PPF_USE_MODULAR_LOADER = "1"
Import-Module .\src\PablitusPrompt.psd1 -ForcePor defecto todos los proveedores se ejecutan. Si el tema activo oculta segmentos, se puede evitar su coste con:
$global:PPF_SkipHiddenProviders = $trueLos proveedores visibles conservan las dependencias que necesitan. Por ejemplo, el segmento Python puede seguir usando información del proveedor Project.
PablitusPrompt/
├── src/
│ ├── PablitusPrompt.psd1
│ ├── PablitusPrompt.psm1
│ ├── Bootstrap.ps1
│ ├── Core/
│ ├── Configuration/
│ ├── Utils/
│ ├── Modules/
│ ├── Themes/
│ ├── Renderers/
│ └── Profile/
├── docs/
├── examples/
├── tests/
├── benchmarks/
├── build/
├── images/
├── CHANGELOG.md
├── RELEASE_DESCRIPTION.md
└── README.md
Contiene el ciclo de vida del prompt, el contexto, el registro de componentes, la caché, los eventos, la telemetría y el motor de renderizado.
Contiene la configuración del prompt, los valores por defecto, la importación/exportación y la recarga en caliente.
Contiene los providers, services y segments organizados por capacidad. Cada módulo puede crecer sin afectar a los demás.
Contiene los temas integrados. Cualquier archivo *.Theme.ps1 en esta carpeta se carga automáticamente.
Contiene los renderers de salida. Cada renderer transforma el contexto y los segmentos en un formato específico.
Contiene ejemplos listos para usar, incluido un tema personalizado:
examples/Themes/Sunset.Theme.ps1
Contiene la suite de Pester, pruebas de regresión, pruebas de resiliencia y scripts de soak/stress.
Contiene reportes y artefactos generados por las herramientas de medición.
La carga del módulo sigue este orden:
Import-Module
│
▼
PablitusPrompt.psd1
│
▼
PablitusPrompt.psm1
│
├── Core
├── Configuration
├── Utils
├── Modules
├── Themes
└── Renderers
│
▼
Public API
La generación del prompt sigue este flujo:
Invoke-Prompt
│
▼
New-PromptContext
│
▼
Providers
│
▼
Pipeline
│
▼
Segments
│
▼
Get-PromptString
│
▼
Renderer
Esta separación permite cambiar la presentación sin alterar la recolección de datos y ampliar los proveedores sin reconstruir el sistema completo.
El renderer se selecciona al generar el prompt:
$context = Invoke-Prompt
Get-PromptString -Context $context -Renderer "PowerLine"También se puede usar el renderer configurado por defecto:
Get-PromptStringPara guardar o integrar el prompt en otros flujos:
Get-PromptString -Renderer "JSON" | ConvertFrom-Json
Get-PromptString -Renderer "HTML" | Set-Content .\prompt.html -Encoding utf8El renderer PowerLine genera bloques con fondo truecolor, separadores triangulares y diamantes de apertura/cierre. Está pensado para terminales modernas con soporte de color de 24 bits y Nerd Font.
Si la terminal no soporta truecolor, se puede usar ANSI o Plain.
| Campo | Valor |
|---|---|
| Nombre | Pablitus Prompt Framework (PPF) |
| Descripción | Framework modular para prompts de PowerShell 7+. |
| Versión | 1.5.0 |
| Plataforma | Windows, Linux y macOS. |
| Tecnología | PowerShell 7+, .NET, ANSI/TrueColor y Nerd Font. |
| Modo de operación | Local, sin telemetría remota. |
| Autor | Walter Pablo Téllez Ayala. |
| Ubicación | Bolivia. |
| Año | 2026. |
PPF está pensado para quienes quieren un prompt propio, comprensible y extensible, sin depender de un servicio externo ni de una configuración opaca.
El proyecto está diseñado para trabajar con contenido UTF-8.
Los temas PowerLine utilizan glifos de Nerd Font y secuencias ANSI truecolor. Para una representación correcta se recomienda:
- Una terminal con soporte de color de 24 bits.
- Una Nerd Font instalada y configurada.
$PSStyle.OutputRendering = "Ansi"cuando se inspeccionan salidas con color en PowerShell.
Los nombres de usuario, hosts, rutas y ramas Git conservan los caracteres proporcionados por el sistema. Si el entorno utiliza otra codificación, algunos glifos pueden mostrarse como signos de interrogación o cuadros.
Compatible con:
PowerShell 7.0 o superior
El proyecto se desarrolla y valida con PowerShell 7.6.7.
PPF es un módulo de PowerShell, pero incluye scripts de inicialización en
src/ShellInit/ que permiten usarlo desde otros shells (bash, zsh, fish, cmd)
invocando a pwsh para obtener el prompt:
| Archivo | Shell | Uso |
|---|---|---|
ppf.bash |
bash | source /ruta/a/ppf.bash en ~/.bashrc |
ppf.zsh |
zsh | source /ruta/a/ppf.zsh en ~/.zshrc |
ppf.fish |
fish | source /ruta/a/ppf.fish en ~/.config/fish/config.fish |
ppf.cmd |
cmd | Llamar desde un macro o AutoRun |
Estos scripts inician pwsh para renderizar el prompt de PPF y lo inyectan como
PS1/PROMPT del shell anfitrión. Nota: iniciar pwsh en cada prompt añade
un coste de arranque; para uso diario se recomienda usar PPF directamente desde
PowerShell 7+.
- Windows
- Linux
- macOS
- Windows Terminal
- WezTerm
- Alacritty
- Kitty
- iTerm2
- Terminales compatibles con ANSI truecolor y Nerd Font
Los proveedores de Git, Node, Python, Docker y Kubernetes detectan sus herramientas localmente. Si una herramienta no está instalada, el segmento correspondiente se omite o se degrada sin romper el prompt.
PPF está diseñado para funcionar de forma local.
El renderizado del prompt no requiere:
- APIs externas.
- Servidores remotos.
- Servicios web.
- Conexión a Internet.
- Envío de telemetría a terceros.
La información se obtiene del sistema local, del entorno de PowerShell y de las herramientas instaladas. La caché y los logs se guardan en las rutas locales del usuario.
PPF se distribuye como módulo de PowerShell en PowerShell Gallery:
Install-Module -Name PablitusPrompt -Scope CurrentUser
Import-Module PablitusPrompt -ForceActualizar a una versión más reciente:
Update-Module -Name PablitusPromptClona el repositorio o descarga una copia:
git clone https://github.com/Pablitus666/PablitusPrompt.gitImporta el manifiesto del módulo:
Import-Module .\src\PablitusPrompt.psd1 -ForceTambién se puede usar el bootstrap:
. .\src\Bootstrap.ps1Get-PromptHealth
Get-PromptThemes
Get-PromptProviders
Get-PromptRenderersAgrega un bloque como este a tu $PROFILE y ajusta la ruta del repositorio:
$PPF = "D:\PablitusPrompt\src"
if (Test-Path (Join-Path $PPF "Bootstrap.ps1")) {
try {
. (Join-Path $PPF "Bootstrap.ps1")
Set-PromptTheme -Name "Dracula"
$global:PPF_SkipHiddenProviders = $true
function global:prompt {
try {
$context = Invoke-Prompt
Get-PromptString -Context $context -Renderer "PowerLine"
}
catch {
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
}
}
}
catch {
Write-Warning "[PPF] No se pudo cargar el prompt: $_"
}
}El try/catch garantiza que un fallo de un proveedor, segmento o renderer no deje la consola sin prompt.
Para volver al prompt anterior, elimina la función prompt del perfil o comenta el bloque.
Import-Module .\src\PablitusPrompt.psd1 -Force
Set-PromptTheme -Name "Nord"
$context = Invoke-Prompt
Get-PromptString -Context $context -Renderer "PowerLine"Ejemplo de prompt PowerLine:
Pablo PablitusPrompt main 13:53
La salida exacta depende del tema, del directorio actual, de las herramientas instaladas y de los segmentos visibles.
Desde la versión 1.5.0, PPF incluye soporte para tres funcionalidades avanzadas de la línea de comandos inspiradas en Oh My Posh:
- Right prompt: un bloque alineado a la derecha del prompt principal.
- Prompt transitorio: un prompt simplificado que se muestra tras aceptar un comando, liberando espacio en pantalla.
- Tooltips: segmentos right-aligned que aparecen al escribir palabras clave (por ejemplo,
git,docker).
Estas funciones se renderizan con el núcleo .NET de PPF y requieren el modo opt-in:
$env:PPF_USE_DOTNET_CORE = "1"
Import-Module PablitusPrompt -ForceEl ancho de terminal, la línea de comandos y la columna del cursor se pasan desde el llamador (CLI o adaptador de PowerShell); el núcleo .NET no consulta la consola, por lo que el resultado es determinista y testeable. Si el núcleo no está disponible, PPF hace fallback al motor de PowerShell.
Se configura con un bloque type: "rprompt" (o alignment: "right") en un tema declarativo JSON:
{
"name": "MiTema",
"renderer": "powerline",
"blocks": [
{
"type": "prompt",
"alignment": "left",
"segments": [
{ "type": "session", "template": "{{ .UserName }}@{{ .HostName }}", "style": "plain" },
{ "type": "path", "template": "{{ .Path.Display }}", "style": "plain" }
]
},
{
"type": "rprompt",
"alignment": "right",
"filler": "·",
"overflow": "hide",
"segments": [
{ "type": "text", "template": "{{ .Path.Folder }}", "style": "plain" }
]
}
]
}Cuando se conoce el ancho de terminal, el núcleo combina ambos bloques con el filler repetido o un movimiento absoluto de cursor:
Get-PromptString -TerminalWidth 80overflow: hide oculta el right prompt si desborda el ancho disponible; overflow: break lo lleva a una nueva línea.
Un prompt simplificado que se muestra tras aceptar un comando:
Get-PromptString -Transient -TerminalWidth 80Soporta template, right_template, filler, newline, foreground y background. Devuelve $null si el tema activo no define un transientPrompt.
Segmentos right-aligned que se muestran al escribir palabras clave específicas (tips). Útil para mostrar información contextual mientras escribes comandos como git o docker:
Get-PromptTooltip -Command "git" -TerminalWidth 80 -Column 5Devuelve el texto del tooltip alineado a la derecha, o $null si no hay coincidencia con ninguna palabra clave configurada.
Controla cómo se combina el tooltip con el right prompt actual:
| Valor | Comportamiento | Predeterminado |
|---|---|---|
replace |
Reemplaza el right prompt actual por el tooltip. | Sí |
extend |
Añade el tooltip al final del right prompt. | No |
prepend |
Antepone el tooltip al inicio del right prompt. | No |
Se configura en el tema con tooltipsAction:
{
"tooltips": [
{
"tips": ["git"],
"type": "text",
"template": "rama: {{ .Git.Branch }}",
"style": "plain"
}
],
"tooltipsAction": "replace"
}Ejemplo de tema JSON completo con right prompt, prompt transitorio y tooltips:
{
"name": "MiTema",
"renderer": "powerline",
"transientPrompt": {
"template": "{{ .Path.Folder }} ❯ ",
"right_template": "{{ .Time }}",
"filler": "-",
"foreground": "#cdd6f4",
"background": "#1e1e2e"
},
"tooltips": [
{
"tips": ["git"],
"type": "text",
"template": "git: {{ .Git.Branch }}",
"style": "plain"
},
{
"tips": ["docker"],
"type": "text",
"template": "docker: {{ .Docker.Containers }}",
"style": "plain"
}
],
"tooltipsAction": "extend",
"blocks": [
{
"type": "prompt",
"alignment": "left",
"segments": [
{ "type": "session", "template": "{{ .UserName }}", "style": "plain" },
{ "type": "path", "template": "{{ .Path.Display }}", "style": "plain" }
]
},
{
"type": "rprompt",
"alignment": "right",
"filler": "·",
"overflow": "hide",
"segments": [
{ "type": "text", "template": "{{ .Path.Folder }}", "style": "plain" }
]
}
]
}Esta guía cubre las tareas más comunes: cambiar de tema, renderizar el prompt
principal, el prompt transitorio y los tooltips, y dejar todo configurado en tu
$PROFILE.
El núcleo .NET de PPF renderiza estas funcionalidades y requiere opt-in:
$env:PPF_USE_DOTNET_CORE = "1"
Import-Module PablitusPrompt -ForcePPF incluye 14 temas oficiales:
Set-PromptTheme -Name "Default"
Set-PromptTheme -Name "Nord"
Set-PromptTheme -Name "Dracula"
Set-PromptTheme -Name "Catppuccin"
Set-PromptTheme -Name "Kali"
Set-PromptTheme -Name "Pablitus"
Set-PromptTheme -Name "Pablitus Dark"
Set-PromptTheme -Name "Pablitus Light"
Set-PromptTheme -Name "Pablitus Neon"
Set-PromptTheme -Name "Pablitus Matrix"
Set-PromptTheme -Name "Pablitus Ocean"
Set-PromptTheme -Name "Pablitus Sunset"
Set-PromptTheme -Name "Pablitus Forest"
Set-PromptTheme -Name "Pablitus Cyberpunk"Consulta los temas disponibles y el activo:
Get-PromptThemes | Select-Object -ExpandProperty Name
Get-ActiveTheme
Get-PromptTheme -Name "Pablitus Dark"Import-Module PablitusPrompt -Force
Set-PromptTheme -Name "Pablitus"
$context = Invoke-Prompt
Get-PromptString -Context $context -Renderer "PowerLine"Pasa el ancho de terminal para que el núcleo combine el prompt principal con el
right prompt (overflow: hide u overflow: break):
Get-PromptString -TerminalWidth 120Un prompt simplificado que se muestra tras aceptar un comando. Requiere que el
tema activo defina un bloque transientPrompt:
Get-PromptString -Transient -TerminalWidth 80Soporta template, right_template, filler, newline, foreground y
background. Devuelve $null si el tema activo no define un transientPrompt.
Segmentos alineados a la derecha que aparecen al escribir palabras clave (tips):
Get-PromptTooltip -Command "git" -TerminalWidth 80 -Column 5-Command: primera palabra del comando (por ejemplo,git,docker).-TerminalWidth: ancho de la terminal para alinear el tooltip a la derecha.-Column: columna del cursor (punto de inicio del alineado a la derecha).
Devuelve el texto del tooltip, o $null si no hay coincidencia con ninguna
palabra clave configurada. Cómo se combina con el right prompt actual depende
de tooltipsAction del tema: replace (predeterminado), extend o prepend.
Este tema declarativo combina right prompt, prompt transitorio y tooltips:
{
"name": "MiTema",
"renderer": "powerline",
"transientPrompt": {
"template": "{{ .Path.Folder }} ❯ ",
"right_template": "{{ .Time }}",
"filler": "-",
"foreground": "#cdd6f4",
"background": "#1e1e2e"
},
"tooltips": [
{
"tips": ["git"],
"type": "text",
"template": "git: {{ .Git.Branch }}",
"style": "plain"
},
{
"tips": ["docker"],
"type": "text",
"template": "docker: {{ .Docker.Containers }}",
"style": "plain"
}
],
"tooltipsAction": "extend",
"blocks": [
{
"type": "prompt",
"alignment": "left",
"segments": [
{ "type": "session", "template": "{{ .UserName }}", "style": "plain" },
{ "type": "path", "template": "{{ .Path.Display }}", "style": "plain" }
]
},
{
"type": "rprompt",
"alignment": "right",
"filler": "·",
"overflow": "hide",
"segments": [
{ "type": "text", "template": "{{ .Path.Folder }}", "style": "plain" }
]
}
]
}Importa y activa el tema JSON con el núcleo .NET:
$env:PPF_USE_DOTNET_CORE = "1"
Import-Module PablitusPrompt -Force
Import-PPFDotNetTheme -Path "$HOME\Documents\PowerShell\Themes\MiTema.ppf.json" -Activate
Set-PromptTheme -Name "MiTema"Agrega este bloque a tu $PROFILE (éditalo con notepad $PROFILE o
code $PROFILE) y ajusta la ruta del repositorio:
$PPF = "D:\PablitusPrompt\src"
if (Test-Path (Join-Path $PPF "Bootstrap.ps1")) {
try {
. (Join-Path $PPF "Bootstrap.ps1")
$env:PPF_USE_DOTNET_CORE = "1"
Set-PromptTheme -Name "Pablitus Dark"
$global:PPF_SkipHiddenProviders = $true
function global:prompt {
try {
$context = Invoke-Prompt
Get-PromptString -Context $context -Renderer "PowerLine"
}
catch {
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
}
}
}
catch {
Write-Warning "[PPF] No se pudo cargar el prompt: $_"
}
}El try/catch garantiza que un fallo de un proveedor, segmento o renderer no
deje la consola sin prompt. El ancho de terminal se pasa desde el adaptador o
CLI que invoque a Get-PromptString; en el bucle nativo de PowerShell el
prompt principal se renderiza sin -TerminalWidth.
Para volver al prompt anterior, elimina la función prompt del perfil o
comenta el bloque.
PPF incluye 14 temas oficiales. Ejemplos de cambio de tema:
Set-PromptTheme -Name "Default"
Set-PromptTheme -Name "Nord"
Set-PromptTheme -Name "Dracula"
Set-PromptTheme -Name "Catppuccin"
Set-PromptTheme -Name "Kali"
Set-PromptTheme -Name "Pablitus"
Set-PromptTheme -Name "Pablitus Dark"
Set-PromptTheme -Name "Pablitus Light"
Set-PromptTheme -Name "Pablitus Neon"
Set-PromptTheme -Name "Pablitus Matrix"
Set-PromptTheme -Name "Pablitus Ocean"
Set-PromptTheme -Name "Pablitus Sunset"
Set-PromptTheme -Name "Pablitus Forest"
Set-PromptTheme -Name "Pablitus Cyberpunk"Los temas oficiales Pablitus, Pablitus Dark, Pablitus Light, Pablitus Neon, Pablitus Matrix, Pablitus Ocean y Pablitus Sunset usan PowerLine truecolor con diamantes, el segmento Time con el glifo de reloj de Nerd Font (U+F017) y paletas optimizadas para terminales claras y oscuras. Pablitus Dark además demuestra las capacidades de Fase 3C (transient prompt con right_template y filler); Pablitus Light y Pablitus Neon usan paletas claras/neón con diamantes magenta y cian; Pablitus Ocean incluye transient prompt con right_template, tooltips con tips específicos de Docker y right prompt con filler; Pablitus Sunset incluye transient prompt con filler personalizado, tooltips con múltiples palabras clave y right prompt con overflow: break.
Get-PromptThemes
Get-PromptTheme -Name "Nord"
Get-ActiveThemePPF puede importar temas externos sin modificar el repositorio:
Import-PromptTheme -Path "$HOME\Documents\PowerShell\Themes\MyTheme.Theme.ps1"
Set-PromptTheme -Name "MyTheme"También acepta un directorio completo:
Import-PromptTheme -Path "$HOME\Documents\PowerShell\Themes"El parámetro -PassThru devuelve los temas importados:
Import-PromptTheme -Path "$HOME\Documents\PowerShell\Themes" -PassThruEl contrato completo de temas está documentado en docs/Themes.md, y hay un ejemplo listo en examples/Themes/Sunset.Theme.ps1.
PPF puede importar y usar temas oficiales de Oh My Posh a través de su núcleo .NET. El núcleo detecta automáticamente un archivo .omp.json de Oh My Posh y lo convierte al formato interno de PPF.
El importador de Oh My Posh reconoce los siguientes tipos de segmento:
| Tipo | Descripción |
|---|---|
session |
Usuario y host |
path |
Directorio actual |
git |
Rama y estado de Git |
text |
Texto estático |
time |
Hora y fecha |
exit |
Código de salida del último comando |
También importa transient_prompt, tooltips, tooltips_action y palette.
Nota: Algunos temas de Oh My Posh usan segmentos que PPF aún no soporta (por ejemplo aws, kubernetes, battery, cpu, etc.). Si al importar un tema obtienes un error de segmento no soportado, usa el parámetro -IgnoreUnsupported para saltarlos en lugar de fallar.
Para tener una base local de temas y no depender de internet, clona el repositorio oficial:
# Crear la carpeta de temas
$temasOmp = "D:\PablitusPrompt\Temas oh my posh"
if (-not (Test-Path -LiteralPath $temasOmp)) {
$null = New-Item -ItemType Directory -Path $temasOmp -Force
}
# Clonar el repositorio de Oh My Posh (solo lo necesario)
$temp = Join-Path $env:TEMP "oh-my-posh-temp"
Remove-Item -Path $temp -Recurse -Force -ErrorAction SilentlyContinue
git clone --depth 1 https://github.com/JanDeDobbeleer/oh-my-posh.git $temp
# Copiar solo la carpeta de temas
Copy-Item -Path (Join-Path $temp "themes\*") -Destination $temasOmp -Recurse -Force
# Limpiar carpeta temporal
Remove-Item -Path $temp -Recurse -Force
Write-Host "Temas descargados: $(Get-ChildItem -Path "$temasOmp\*.omp.json" | Measure-Object).Count" -ForegroundColor GreenEsto descarga los 123 temas oficiales de Oh My Posh a tu carpeta local.
# 1. Cargar PPF y activar el núcleo .NET
Import-Module PablitusPrompt -Force
$env:PPF_USE_DOTNET_CORE = "1"
# 2. Importar y activar un tema (ejemplo: cobalt2)
Import-PPFDotNetTheme -Path "D:\PablitusPrompt\Temas oh my posh\cobalt2.omp.json" -Activate -IgnoreUnsupported
# 3. Renderizar el prompt
Get-PromptString -TerminalWidth 120 -NoColor
# 4. (Opcional) Guardar como tema persistente para sesiones futuras
Set-PromptThemePersist -DotNetThemePath "D:\PablitusPrompt\Temas oh my posh\cobalt2.omp.json"| Parámetro | Descripción |
|---|---|
-Path |
Ruta al archivo .omp.json de Oh My Posh (obligatorio) |
-Activate |
Importa y activa el tema en un solo paso |
-IgnoreUnsupported |
Salta segmentos no soportados en lugar de fallar |
PPF incluye una función para guardar tu tema favorito y restaurarlo automáticamente al abrir PowerShell:
# Guardar un tema PPF nativo
Set-PromptThemePersist -ThemeName "Pablitus Minimal"
# Guardar un tema de Oh My Posh (.NET)
Set-PromptThemePersist -DotNetThemePath "D:\PablitusPrompt\Temas oh my posh\cobalt2.omp.json"
# Guardar ambos
Set-PromptThemePersist -ThemeName "Pablitus Minimal" -DotNetThemePath "D:\PablitusPrompt\Temas oh my posh\cobalt2.omp.json"La preferencia se guarda en $env:USERPROFILE\ppf-theme-pref.json y se restaura automáticamente desde tu $PROFILE (el instalador ya incluye la configuración necesaria).
Una vez activado un tema con el núcleo .NET, puedes usar:
# Prompt principal con right prompt
Get-PromptString -TerminalWidth 120
# Prompt transitorio (después de aceptar un comando)
Get-PromptString -Transient -TerminalWidth 120
# Tooltip para un comando específico
Get-PromptTooltip -Command "git" -TerminalWidth 120 -Column 5PPF está optimizado para que el prompt no agregue una latencia innecesaria a la terminal.
El cargador rápido concatena las fuentes modulares y las ejecuta una sola vez. En la máquina de referencia, la carga inicial se redujo de forma significativa frente al cargador modular.
$global:PPF_BootstrapModeSi un tema oculta segmentos, se puede evitar el coste de sus proveedores:
$global:PPF_SkipHiddenProviders = $truePPF mantiene una caché en memoria y puede persistir valores en disco. Los proveedores y segmentos reutilizan información cuando corresponde.
Set-PPFCache -Key "MiClave" -Value "MiValor"
Get-PPFCache -Key "MiClave"
Clear-PPFCache
Clear-AllPPFCacheMeasure-Prompt
Measure-PromptDetailed
Measure-PromptCacheComparisonSi se utiliza un módulo de iconos para Get-ChildItem, se recomienda cargarlo de forma diferida. Importarlo al inicio agrega cientos de milisegundos al arranque de PowerShell.
PPF está diseñado para seguir funcionando aunque un componente falle o no esté disponible.
Entre los mecanismos utilizados se encuentran:
- Aislamiento de errores por proveedor y por segmento.
try/catchen la integración del prompt.- Valores por defecto y fallbacks.
- Detección opcional de herramientas externas.
- Degradación controlada cuando Git, Docker, Node, Python o Kubernetes no están disponibles.
- Caché con TTL y persistencia opcional.
- Recarga en caliente de configuración.
- Pruebas de resiliencia y recuperación.
- Validación de sintaxis y análisis estático.
Si un proveedor falla, el prompt puede seguir renderizando el resto de los segmentos. Si un segmento visual falla, solo ese segmento desaparece.
Las versiones oficiales de Pablitus Prompt Framework se publican en:
- Repositorio: github.com/Pablitus666/PablitusPrompt
- Releases: github.com/Pablitus666/PablitusPrompt/releases
- PowerShell Gallery: powershellgallery.com/packages/PablitusPrompt
PPF se distribuye como módulo de PowerShell. No requiere un instalador ni un ejecutable independiente. Los artefactos de build incluyen:
PablitusPrompt-v<version>.zip— módulo listo para copiar manualmente.PablitusPrompt.<version>.nupkg— paquete para PowerShell Gallery (Install-Module).
Para generar los artefactos de build, ejecutar pruebas y actualizar la documentación de API:
pwsh -File .\build.ps1El script build.ps1 ejecuta:
- Pruebas Pester (todas deben pasar).
- Validación de cobertura de código (≥90%).
- Benchmarks de rendimiento.
- Generación de documentación de API (
docs/API.md). - Empaquetado como ZIP y como
.nupkgpara PowerShell Gallery.
Los artefactos se dejan en la carpeta artifacts/.
PPF utiliza principalmente:
- PowerShell 7+
- .NET
- ANSI / TrueColor
- Nerd Font
- JSON
- PSD1
- HTML / CSS
- Pester
- PSScriptAnalyzer
- Runspaces
- FileSystemWatcher
- CIM/WMI,
/proc/meminfo,sysctlyvm_statsegún la plataforma
No requiere frameworks externos para renderizar el prompt.
PPF busca combinar cuatro objetivos principales:
Separar proveedores, segmentos, temas y renderers para que cada parte pueda evolucionar sin arrastrar a las demás.
Evitar trabajo innecesario en el hot path del prompt, reutilizar caché y permitir omitir proveedores ocultos.
Ofrecer temas integrados y un contrato claro para crear temas propios sin tocar el código del framework.
Funcionar en Windows, Linux y macOS con PowerShell 7+, sin depender de un servicio externo.
La separación entre estas responsabilidades permite:
- Cambiar la presentación sin alterar los proveedores.
- Agregar nuevos proveedores sin reconstruir el sistema.
- Crear temas sin modificar el núcleo.
- Mantener una arquitectura comprensible y testeable.
- Facilitar el mantenimiento y la evolución del proyecto.
Versión actual:
v1.5.0
Estado:
Stable
El proyecto incluye actualmente:
- Arquitectura modular.
- Bootstrap rápido.
- 13 proveedores.
- 14 segmentos.
- 8 renderers.
- 14 temas integrados.
- Temas personalizados.
- Caché en memoria y disco.
- Configuración con hot reload.
- Eventos y telemetría local.
- Suite de pruebas con Pester.
- Análisis estático con PSScriptAnalyzer.
- Documentación de arquitectura, API, temas, providers y renderers.
Antes de realizar cambios importantes, se recomienda revisar la arquitectura existente para mantener la separación entre:
Providers
│
▼
PromptContext
│
▼
Pipeline
│
▼
Segments
│
▼
Renderer
PPF genera información a partir del sistema local y del entorno de PowerShell.
El prompt puede mostrar información potencialmente identificable, como:
- Nombre de usuario.
- Nombre del equipo.
- Directorio actual.
- Rama y estado de Git.
- Versiones de runtimes instalados.
- Estado de batería, CPU y memoria.
- Contexto de Kubernetes.
PPF no envía esa información a servicios externos. La telemetría es local y se utiliza para diagnóstico y benchmarks.
Antes de publicar capturas, logs o reportes generados por el framework, se recomienda revisar su contenido y eliminar cualquier información personal o identificable que no se desee compartir.
Este proyecto se distribuye bajo la licencia MIT.
Consulta el archivo LICENSE para más información.
Las contribuciones, sugerencias y mejoras son bienvenidas.
Si encuentras un problema o tienes una idea, puedes abrir un issue o un pull request en el repositorio.
Antes de enviar cambios, se recomienda ejecutar:
Invoke-Pester -Path .\tests
Invoke-ScriptAnalyzer -Path .\src -Recurse -Settings .\PSScriptAnalyzerSettings.psd1Walter Pablo Téllez Ayala
Software Developer
📍 Bolivia 🇧🇴
📧 pharmakoz@gmail.com
© 2026 — Pablitus Prompt Framework
Modular.
Rápido.
Personalizable.
Hecho para PowerShell.

