Configuraciones de Nushell
Solo lograría hacer la transición de Zsh a Nushell definitivamente si me enamorara del nuevo. Entonces vamos a hacerlo bonito, inteligente, y con algunas personalizaciones que nos hagan sentir en casa.
Cuando zsh se carga va a buscar el archivo .zshrc en el home del usuario. ¿Dónde Nushell va a buscar esto?
Los archivos de configuración de Nushell son almacenados en diferentes lugares dependiendo del sistema operativo
- Linux deben quedar en
~/.config/nushell/ - Mac
/Users/tu_user/Library/Application\ Support/nushell/ - Windows
C:\Users\<tu_usuario>\AppData\Roaming\nushell\
Dentro de esa carpeta tendremos los siguientes archivos.
-
config.nu: Configuraciones generales de Nushell -
env.nu: Variables de ambiente -
login.nu: Configuraciones específicas de loginVale la pena mencionar que tenemos el siguiente mensaje todavía en la página de documentación de Nushell.
!!! Nushell todavía está en desarrollo y puede no estar estable para uso diario. !!! Algunas distribuciones Linux poseen una lista de shells válidos en /etc/shells y no permitirán modificar el shell hasta que Nu esté en esa lista blanca.No recomiendo tornar nushell el shell default del sistema todavía cambiando con el comando chsh, pero podemos configurar la terminal que estamos usando para abrir con nushell en vez de apuntar a zsh.
cat ~/.config/nushell/config.nu
# Installed by:
# version = "0.101.0"
#
# This file is used to override default Nushell settings, define
# (or import) custom commands, or run any other startup tasks.
# See https://www.nushell.sh/book/configuration.html
#
# This file is loaded after env.nu and before login.nu
#
# You can open this file in your default editor using:
# config nu
#
# See `help config nu` for more options
#
# You can remove these comments if you want or leave
# them for future reference.
Aquí dentro vamos a colocar nuestras configuraciones y se reflejará dentro de $env.config
Tema
Vamos en la misma idea de Oh My ZSH vamos a utilizar Oh My Posh. Ve la mejor forma de instalar en tu sistema e instala para después utilizarlo. Elegí Oh my Posh porque me gusta el tema Dracula y logro configurarlo rápido.
# Funciona para linux y mac el comando abajo.
brew install jandedobbeleer/oh-my-posh/oh-my-posh
Vamos a colocar el tema que queremos en una carpeta. Elige el theme aquí y copia el código que deseas. Si quieres haz el download del archivo directo.
mkdir ~/.poshthemes
curl https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/dracula.omp.json -o ~/.poshthemes/dracula.omp.json
Genera el archivo de inicialización de Oh My Posh para nushell. Elige el tema aquí.
oh-my-posh init nu --config ~/.poshthemes/dracula.omp.json
Esto guarda el script de inicialización en ~/.oh-my-posh.nu. Cualquier cosa que necesitemos cambiar de comportamiento es aquí que haremos.
Ahora necesitamos colocar la línea source ~/.oh-my-posh.nu en el archivo de configuración, en mi caso aquí ~/.config/nushell/config.nu. Esto cargará las configuraciones en la inicialización de Nushell.

Instala la fuente meslo utilizando el propio oh-my-posh si quieres.
oh-my-posh font install meslo
Ahora coloca tu terminal para utilizar la fuente MesloLGM Nerd Font y en vscode en settings.json adiciona la línea abajo para que la terminal integrada también utilice esa fuente y no tengamos problemas con los símbolos.
{
"terminal.integrated.fontFamily": "MesloLGM Nerd Font",
}
Aprovechando que estamos hablando de vscode si quieres colocar la terminal para abrir con nushell en vscode.
{
"terminal.integrated.profiles.osx": {
"nu": {
"path": "/opt/homebrew/bin/nu",
}
},
"terminal.integrated.defaultProfile.osx": "nu",
}
Una cosa que me gusta modificar y no dejar los comandos quedar transientes entonces comento esa línea en el archivo ~/.oh-my-posh.nu para que el efecto quede así.
# $env.TRANSIENT_PROMPT_COMMAND = {|| _omp_get_prompt transient }

Listo, ya comenzar a mejorar, a partir de ahora ajustar después si necesario.
Auto Complete
Yo ni consigo utilizar más un shell que no ofrezca un auto complete para las herramientas que más utilizo. Siguiendo la documentación carapace hace ese servicio para nosotros y ya tiene varios completes listos, vamos a utilizarlo por ahora.
brew install carapace
Vamos ahora a ajustar el config.nu nuevamente adicionando una llamada para carapace para completar los comandos, inclusive cuando utilicemos alias.
Ya estoy definiendo aquí el editor predeterminado que voy a usar y removiendo el banner, esto no es necesario para el auto complete, solo estoy aprovechando el espacio para hablar de esto.
# Definiendo el editor predeterminado
$env.config.buffer_editor = "vim"
# Definiendo
let carapace_completer = {|spans|
let expanded_alias = (scope aliases | where name == $spans.0 | get -i 0 | get -i expansion)
let spans = (if $expanded_alias != null {
$spans | skip 1 | prepend ($expanded_alias | split row " " | take 1)
} else { $spans })
carapace $spans.0 nushell ...$spans | from json
}
$env.config = {
# Remoción del banner
show_banner: false
completions: {
external: {
enable: true
# llamando el complete...
completer: $carapace_completer
}
}
}
Una facilidad es digitar en la terminal config nu y abrirá el archivo para edición utilizando el editor que definiste en vez de tener que ir hasta el archivo y abrir, pero para eso el editor debe estar definido primero.
Caso no esté, ejecuta el comando $env.config.buffer_editor = "vim" antes y después config nu.
Otras mejoras voy colocando aquí en el futuro, creo que esto es lo básico para comenzar.
Fijando Variables de Ambiente
Las variables de ambiente podemos colocar en un archivo separado como mencioné anteriormente que es el env.nu
Si utilizamos el comando config env abrirá el editor para configurar el archivo.
config env
Adiciona por ejemplo
$env.MI_VAR = "mi valor"
$env.OTRA_VAR = "otro valor"
Al iniciar el shell vamos a conferir lo que tenemos.
$env.MI_VAR
mi valor
Alias
Los alias son colocados también en el archivo de configuración.
#....
alias cat = bat -P
alias tf = terraform
alias k = kubectl
alias klog = kubectl logs
alias kex = kubectl exec -it
alias docker = podman
alias vg = vagrant
alias tfdocs = terraform-docs
alias g = git
alias code = ^code
source ~/.oh-my-posh.nu
#...
Paths
Cuando ejecutamos el comando nu a partir de otro shell heredará los paths y colocar en las variables de ambiente, pero si iniciamos directamente el nu no tendremos todos los paths.
Para adicionar paths vamos también adicionar en config.nu. En ese caso solamente estamos haciendo un append para paths extras.
$env.PATH = ($env.PATH | prepend [
"/opt/homebrew/bin"
"/opt/homebrew/share/google-cloud-sdk/bin"
"/tercero/camino"
])