Un perfil de PowerShell moderno, extensible y lleno de funciones útiles para desarrolladores que trabajan con Python, Git, Docker, WSL, winget y más.
Características • Instalación • Uso • Funciones • Configuración • INSTALL.md
- Oh My Posh con múltiples temas personalizables
- PSReadLine configurado con colores y atajos optimizados
- Cambio dinámico de temas sin reiniciar
- Detección automática de proyectos Python
- Activación automática de entornos virtuales
- Limpieza de archivos
__pycache__ - Generador de proyectos Python con estructura profesional
- Estado de repositorio visual y colorido
- Commits rápidos con un comando
- Creación rápida de branches
- Información detallada de commits pendientes
- Estado de contenedores en un vistazo
- Limpieza automática de recursos
- Shortcuts para Docker Compose
- Gestión simplificada de contenedores
- Alias
wgpara winget Install-WingetPackage— instalar paquetes (con opción -Silent)Search-WingetPackage— buscar paquetesUpdate-WingetPackages— actualizar todos los paquetes
- Ejecutar comandos Linux desde PowerShell
- Abrir directorio actual en WSL
- Navegación fluida entre Windows y Linux
- Top procesos por CPU/Memoria
- Uso de disco con alertas visuales
- Información completa del sistema
- Estadísticas de hardware en tiempo real
- Guarda comandos frecuentes
- Recupera y copia snippets al portapapeles
- Gestión completa de fragmentos de código
- Sistema de logging opcional
- Visualización colorida de logs
- Niveles de log configurables
- Creación automática de proyectos Python
- Creación automática de proyectos Node.js
- Estructuras profesionales con mejores prácticas
- Opción de incluir Docker y Git
- PowerShell 7.0 o superior - Descargar
- Ya incluye PSReadLine y otros módulos necesarios
- El perfil NO funcionará en Windows PowerShell 5.1
Estas herramientas son opcionales. El perfil detecta automáticamente cuáles tienes instaladas y solo activa las funciones correspondientes:
| Herramienta | Para qué sirve | Funciones afectadas | Cómo instalar |
|---|---|---|---|
| winget | Gestor de paquetes de Windows | wg, Install-WingetPackage, Search-WingetPackage, Update-WingetPackages |
Viene con Windows 10/11. Si falta: instala App Installer desde Microsoft Store |
| Oh My Posh | Temas bonitos en el prompt | Temas dinámicos | winget install JanDeDobbeleer.OhMyPosh |
| Git | Control de versiones | Funciones Git mejoradas | winget install Git.Git |
| Docker Desktop | Contenedores | Funciones Docker | winget install Docker.DockerDesktop |
| WSL | Linux en Windows | Funciones WSL | Viene con Windows 10/11 |
| Python | Desarrollo/ejecución Python | py, pup, Enable-PythonVirtualEnv, Clear-PythonCache |
winget install Python.Python.3.12 |
| Node.js | Desarrollo/ejecución Node | Uso de node/npm y scripts de proyectos Node generados |
winget install OpenJS.NodeJS |
install.ps1 usa winget para instalar Oh My Posh y Git si lo tienes disponible.
Generadores de proyectos: New-Project, New-PythonProject y New-NodeProject sí están disponibles sin Python/Node, porque generan desde templates JSON. Python/Node se requieren para ejecutar o gestionar el proyecto resultante (venv, python, node, npm, etc.).
- Ver tu ruta de perfil (opcional):
$PROFILE- Elegir un método:
# Opción A — Recomendada: clon completo (perfil, modules, templates, control total)
git clone https://github.com/llopgui/UltraShell.git
cd UltraShell
.\install.ps1 -Local
# Opción B — Sin clonar: ejecutar el instalador publicado en GitHub
# (descarga a carpeta temporal y solo copia al perfil si todo lo crítico se obtuvo bien)
irm https://raw.githubusercontent.com/llopgui/UltraShell/main/install.ps1 | Invoke-ExpressionSeguridad:
irm … | iexejecuta código remoto sin verificación por hash. Usa esta vía solo si confías en el origen y en la red; para más control usa la opción A. Detalle en INSTALL.md.
Opción C — Manual: copia
Microsoft.PowerShell_profile.ps1→$PROFILE,powershell.config.jsony las carpetasmodules/ytemplates/al directorio del perfil (Split-Path $PROFILE). Pasos en INSTALL.md.
- Recargar el perfil:
. $PROFILEUpdate-UltraShell(cargado con el perfil): actualiza desde Git si el perfil está en un clon con.git, o descarga la última versión desde GitHub (mismo enfoque atómico que el instalador).- Si el perfil está instalado en
Documents\PowerShellpero el repo está en otra carpeta, define$env:ULTRASHELL_REPO_ROOTapuntando al clon para que el modo Git use ese directorio (evita depender solo del fallback de ruta de desarrollo).
El perfil detecta automáticamente qué tienes instalado:
# Ver ayuda completa (siempre disponible)
help-profile
# Verificar información del entorno
devinfo
# Ver si Oh My Posh está disponible
theme # Si no tienes Oh My Posh, verás un mensaje
# Ver si Git está disponible
gs # Si no tienes Git, verás un mensaje
# Ver si Docker está disponible
dps # Si no tienes Docker, verás un mensaje
# Ver si winget está disponible
wg --version # Si no tienes winget, verás un mensajeEl perfil es inteligente: Si intentas usar una función que requiere una herramienta que no tienes instalada, te mostrará un mensaje claro indicándolo.
Los temas se configuran por nombre en config.psd1. UltraShell los descarga y guarda en una carpeta local controlada. Lista completa: ohmyposh.dev/docs/themes
- Carpeta de temas:
{PROFILEDIR}\oh-my-posh-themes(junto al perfil, p. ej.Documents\PowerShell\oh-my-posh-themes) - Durante
.\install.ps1puedes elegir el tema y se descargan automáticamente - Para añadir un tema nuevo:
Install-OhMyPoshTheme -Name tokyo
# En config.psd1
OhMyPoshThemesPath = '{PROFILEDIR}\oh-my-posh-themes'
OhMyPoshThemes = @('space', 'night-owl', 'atomic', 'zash', 'powerlevel10k_rainbow')# Ver ayuda completa
help-profile
# Ver información del entorno
devinfo
# Estado de Git mejorado
gs
# Crear proyecto Python profesional (estructura + reglas Cursor)
New-PythonProject mi-api
# Crear módulo PowerShell profesional
New-PowerShellProject MiModulo
# Cambiar tema de Oh My Posh
theme # Muestra temas disponibles
theme 2 # Cambia al tema #2
next-theme # Siguiente tema
# Monitoreo de sistema
sysinfo # Información completa
topcpu # Top procesos por CPU
topmem # Top procesos por memoria
diskinfo # Uso de disco| Comando | Descripción | Ejemplo |
|---|---|---|
ll |
Lista archivos del directorio | ll |
la |
Lista todos los archivos (incluyendo ocultos) | la |
up [n] |
Sube N niveles de directorio | up 3 |
mkcd <dir> |
Crea directorio y navega a él | mkcd proyecto |
open [ruta] |
Abre explorador en directorio | open . |
touch <archivo> |
Crea archivo o actualiza timestamp | touch test.txt |
which <comando> |
Muestra ubicación de comando | which python |
ff <patrón> |
Busca archivos por nombre (parámetros opcionales: -MaxDepth, -ExcludeDirectoryNames) |
ff *.py |
fsize [ruta] |
Calcula tamaño de directorio (mismos parámetros opcionales para acotar recorrido) | fsize . |
| Comando | Descripción | Ejemplo |
|---|---|---|
g |
Alias de git | g status |
gs / gst |
Estado detallado de Git | gs |
gitcommit <msg> |
Add, commit en un comando | gitcommit "Fix bug" |
gitbr <nombre> |
Crea y cambia a nueva branch | gitbr feature/nueva |
| Comando | Descripción | Ejemplo |
|---|---|---|
py |
Alias de python | py script.py |
pup |
Actualiza pip | pup |
Clear-PythonCache |
Limpia __pycache__ |
Clear-PythonCache |
New-PythonProject |
Crea proyecto Python profesional (estructura + reglas Cursor) | New-PythonProject mi-api |
New-PowerShellProject |
Crea módulo PowerShell profesional (+ reglas Cursor) | New-PowerShellProject MiModulo |
Enable-PythonVirtualEnv |
Activa venv del proyecto | Enable-PythonVirtualEnv |
| Comando | Descripción | Ejemplo |
|---|---|---|
dps |
Estado de contenedores | dps |
dcu |
Docker Compose up | dcu -Detached -Build |
dcd |
Docker Compose down | dcd -RemoveVolumes |
Clear-DockerResources |
Limpia recursos Docker | Clear-DockerResources -Force |
| Comando | Descripción | Ejemplo |
|---|---|---|
wsl-here |
Abre WSL en directorio actual | wsl-here |
wslrun <cmd> |
Ejecuta comando en WSL | wslrun "ls -la" |
Get-WSLDistributions |
Lista distros WSL | Get-WSLDistributions |
| Comando | Descripción | Ejemplo |
|---|---|---|
wg |
Alias de winget | wg search python |
Install-WingetPackage <id> |
Instala paquete | Install-WingetPackage Git.Git -Silent |
Search-WingetPackage <query> |
Busca paquetes | Search-WingetPackage "visual studio" |
Update-WingetPackages |
Actualiza todos los paquetes | Update-WingetPackages -AcceptAll |
| Comando | Descripción | Ejemplo |
|---|---|---|
sysinfo |
Información completa del sistema | sysinfo |
topcpu [n] |
Top N procesos por CPU | topcpu 5 |
topmem [n] |
Top N procesos por memoria | topmem 10 |
diskinfo |
Uso de disco con alertas | diskinfo |
| Comando | Descripción | Ejemplo |
|---|---|---|
theme |
Lista temas disponibles | theme |
theme <n> |
Cambia a tema N | theme 2 |
next-theme |
Siguiente tema | next-theme |
Install-OhMyPoshTheme <name> |
Descarga tema a carpeta local | Install-OhMyPoshTheme tokyo |
En la primera carga se crean snippets de ejemplo (git-push, python-venv, docker-up, etc.). Usa snip-list para verlos.
| Comando | Descripción | Ejemplo |
|---|---|---|
snip-save <nombre> <contenido> |
Guarda snippet | snip-save git-push "git push origin main" |
snip-get <nombre> |
Obtiene snippet | snip-get git-push -CopyToClipboard |
snip-list |
Lista todos los snippets | snip-list |
Remove-Snippet <nombre> |
Elimina snippet | Remove-Snippet git-push |
| Comando | Descripción | Ejemplo |
|---|---|---|
New-PythonProject <nombre> |
Crea proyecto Python profesional (estructura + reglas Cursor). Default: FastAPI | New-PythonProject mi-api |
New-NodeProject <nombre> |
Crea proyecto Node.js desde template | New-NodeProject app |
New-Project / Init-Project |
Crea proyecto desde template JSON (+ cursor rules; alias equivalente) | New-Project -Name mi-api -Template python/fastapi |
Get-ProjectTemplate |
Lista templates disponibles | Get-ProjectTemplate |
| Comando | Descripción | Ejemplo |
|---|---|---|
Set-ProfileLogging -Enable $true |
Habilita logging | Set-ProfileLogging -Enable $true |
Show-ProfileLog |
Muestra log | Show-ProfileLog -Last 100 |
| Comando | Descripción | Ejemplo |
|---|---|---|
devinfo |
Info del entorno de desarrollo | devinfo |
help-profile |
Ayuda del perfil | help-profile |
Update-UltraShell |
Actualiza perfil/módulos/templates desde Git o descarga | Update-UltraShell |
Clear-PSHistory |
Limpia historial PowerShell | Clear-PSHistory |
El perfil define un conjunto de claves reconocidas en $Script:Config. Al cargar config.psd1, solo se aplican entradas cuyo nombre coincide con esas claves (así se evitan typos y opciones obsoletas). Si añades una clave que el perfil no declara, verás un aviso del tipo clave desconocida ignorada.
Claves habituales (la plantilla en el repo es config.psd1):
| Clave | Descripción breve |
|---|---|
ShowMessagesInIDE |
Mensajes del perfil en VS Code / Cursor |
OhMyPoshThemesPath |
Carpeta de temas exportados (placeholders {PROFILEDIR}, {USERPROFILE}) |
OhMyPoshThemes |
Lista de nombres de tema Oh My Posh |
CurrentThemeIndex |
Índice del tema activo (0-based) |
VenvPaths / PythonProjectFiles |
Detección de proyectos y entornos Python |
SSHAutoLoadKeys / SSHKeyPaths |
Autocarga de claves SSH |
EnableLogging / LogPath |
Registro de eventos del perfil |
SnippetsPath |
Directorio de snippets |
ProjectTemplatesPath |
Carpeta de templates JSON (por defecto junto al perfil) |
PSReadLinePredictionSource |
None, History o HistoryAndPlugin (PSReadLine) |
BenchmarkThresholdMs |
Umbral para mostrar tiempos de carga de módulos |
Ejemplo mínimo de referencia:
@{
ShowMessagesInIDE = $false
OhMyPoshThemesPath = '{PROFILEDIR}\oh-my-posh-themes'
OhMyPoshThemes = @('space', 'atomic', 'zash', 'night-owl', 'powerlevel10k_rainbow')
CurrentThemeIndex = 0
PSReadLinePredictionSource = 'HistoryAndPlugin'
EnableLogging = $true
LogPath = '{USERPROFILE}\Documents\PowerShell\Logs\perfil.log'
SnippetsPath = '{USERPROFILE}\Documents\PowerShell\Snippets'
BenchmarkThresholdMs = 2000
}# Opción 1: Descargar y añadir a la lista
Install-OhMyPoshTheme -Name tokyo
# Opción 2: Editar config.psd1
# Añade el nombre del tema a OhMyPoshThemes- Predicción inline: en
config.psd1usaPSReadLinePredictionSource = 'HistoryAndPlugin'(uHistory/None). - Colores y atajos avanzados: edita modules/UltraShell.PSReadLine.ps1 (
Set-PSReadLineOption -Colors @{ ... }), o amplía el módulo si quieres exponer más opciones víaconfig.psd1.
Set-Alias -Name 'mi-alias' -Value 'Mi-Funcion' -Force# Crear proyecto profesional (estructura + reglas Cursor)
New-PythonProject mi-api
# Navegar al proyecto
cd mi-api
# Inicializar entorno virtual explícitamente (recomendado)
Init-UvProject
# Alternativa manual si no usas uv:
# python -m venv .venv
.venv\Scripts\activate
# Instalar dependencias
pip install -r requirements-dev.txt
# Trabajar en el proyecto
# (el entorno virtual se activará automáticamente al entrar al directorio)# Ver estado de contenedores
dps
# Iniciar servicios
dcu -Detached
# Monitorear recursos
sysinfo
topmem
# Limpiar cuando termines
Clear-DockerResources# Buscar paquetes
Search-WingetPackage python
wg search "visual studio"
# Instalar (modo silencioso)
Install-WingetPackage Git.Git -Silent
Install-WingetPackage Python.Python.3.12 -Silent
# Actualizar todos los paquetes
Update-WingetPackages -AcceptAll# Información completa del sistema
sysinfo
# Monitorear procesos
topcpu
topmem
# Verificar espacio en disco
diskinfo
# Limpiar logs
Clear-PSHistoryUltraShell/
├── Microsoft.PowerShell_profile.ps1 # Perfil principal
├── config.psd1 # Configuración personalizable
├── powershell.config.json # Configuración de PowerShell
├── README.md # Este archivo
├── INSTALL.md # Guía de instalación
├── LICENSE # Licencia WTFPL
├── install.ps1 # Instalador automático
├── modules/ # Módulos del perfil
│ ├── UltraShell.Core.ps1 # Logging, utilidades, snippets, monitoreo
│ ├── UltraShell.PSReadLine.ps1 # Config de línea de comandos
│ ├── UltraShell.Python.ps1 # Venvs, Clear-PythonCache
│ ├── UltraShell.Themes.ps1 # Oh My Posh, SSH Agent
│ ├── UltraShell.Dev.ps1 # Docker, WSL, Git, winget
│ └── UltraShell.Projects.ps1 # Motor de templates, New-Project, New-PythonProject, New-NodeProject
├── templates/ # Templates JSON (fuente única de verdad)
│ ├── python/ # fastapi.json, basic.json
│ ├── powershell/ # module.json
│ ├── nodejs/ # basic.json
│ ├── rust/ # basic.json
│ ├── go/ # basic.json
│ └── custom/ # example.json y personalizados
Nota: Los templates JSON en templates/ son la fuente única de verdad para generar proyectos. Cada template incluye estructura, archivos y cursor rules integradas. Ver templates/README.md.
📄 Ver ejemplo de template FastAPI
Si quieres crear templates personalizados, aquí hay un ejemplo de cómo sería un template para proyectos FastAPI:
Ejemplo ilustrativo (el proyecto real usa templates/python/fastapi.json con más campos):
{
"name": "FastAPI Project Template",
"description": "Template para proyectos FastAPI con estructura profesional",
"structure": {
"directories": [
"app",
"app/api",
"app/api/endpoints",
"app/core",
"app/models",
"app/schemas",
"app/db",
"tests",
"docs"
],
"files": {
"app/__init__.py": "",
"app/main.py": "from fastapi import FastAPI\n\napp = FastAPI(title=\"Mi API\")\n\n@app.get(\"/\")\ndef read_root():\n return {\"message\": \"Hello World\"}",
"requirements.txt": "fastapi>=0.104.0\nuvicorn[standard]>=0.24.0\npydantic>=2.5.0",
".env.example": "APP_NAME=FastAPI App\nDEBUG=True\nDATABASE_URL=sqlite:///./sql_app.db"
}
}
}Nota: Usa New-PythonProject mi-api para crear un proyecto FastAPI completo con cursor rules integradas. Get-ProjectTemplate lista todos los templates disponibles.
Ver más detalles en templates/README.md.
Las contribuciones son bienvenidas. Si querés mejorar este perfil:
- Haz fork del repositorio.
- Crea una rama (
git checkout -b feature/nueva-funcionalidad). - Haz commit de los cambios (
git commit -m 'Add: nueva funcionalidad'). - Sube la rama (
git push origin feature/nueva-funcionalidad). - Abre un pull request.
# Verificar política de ejecución
Get-ExecutionPolicy
# Si es necesario, cambiar a RemoteSigned
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser# Verificar instalación
oh-my-posh --version
# Si no está instalado:
winget install JanDeDobbeleer.OhMyPoshOh My Posh usa Nerd Fonts para iconos y símbolos. Si ves cuadrados o caracteres mal dibujados, la terminal no está usando una fuente compatible.
-
Instala una Nerd Font:
oh-my-posh font install
(Elige una, por ejemplo MesloLGM Nerd Font.)
-
Configura la fuente en tu terminal:
- Windows Terminal: Configuración → Valores predeterminados → Apariencia → Fuente → selecciona la Nerd Font instalada.
- Cursor / VS Code: En
settings.jsonañade o edita:"terminal.integrated.fontFamily": "MesloLGM Nerd Font"
Cierra y vuelve a abrir la terminal para que se aplique.
El servicio OpenSSH Authentication Agent en Windows suele estar Deshabilitado por defecto. Para poder usarlo:
- Abre PowerShell como Administrador (clic derecho → Ejecutar como administrador).
- Ejecuta:
Set-Service ssh-agent -StartupType Manual Start-Service ssh-agent
- Cierra y abre de nuevo tu terminal normal; UltraShell intentará iniciar el agente y cargar las claves.
Si el servicio no existe, instala el agente: Configuración → Aplicaciones → Características opcionales → Agregar una característica → busca OpenSSH (cliente y/o servidor según necesites).
# Activar manualmente
Enable-PythonVirtualEnv
# Verificar rutas configuradas
$Script:Config.VenvPathsVerifica los templates Python disponibles y usa uno soportado:
Get-ProjectTemplate -Type python
New-PythonProject mi-api -Template fastapi
New-PythonProject mi-lib -Template basicwinget viene con Windows 10/11. Si no lo tienes:
- Instala App Installer desde Microsoft Store
- O actualiza Windows a la última versión
Si winget no está disponible, el install.ps1 no podrá instalar Oh My Posh ni Git automáticamente; instálalos manualmente o con otro gestor de paquetes.
El perfil solo aplica claves que existen en su tabla de defaults. Si añadiste una opción con nombre distinto al esperado, se ignora y se muestra el warning. Solución: usa una de las claves documentadas en la sección de configuración o añade la clave al hashtable $Script:Config en Microsoft.PowerShell_profile.ps1 si estás extendiendo el proyecto.
Este proyecto está bajo la Licencia WTFPL (Do What The Fuck You Want To Public License).
En resumen: Haz lo que te dé la gana con este código. 🎉
Consulta el archivo LICENSE para más detalles (son literalmente 2 líneas).
- Oh My Posh - Temas hermosos para PowerShell
- PSReadLine - Mejor experiencia de línea de comandos
- La comunidad de PowerShell
¿Preguntas? ¿Sugerencias? ¡Abre un issue!
UltraShell v3.2.0 - Hecho con ❤️ y PowerShell