Configurações do Nushell
Só conseguiria fazer a transição do Zsh para ao Nushell definitivamente se me apaixonasse pelo novo. Então vamos fazer ficar bonito, esperto, e com algums personalizações que nos faça sentir em casa.
Quando o zsh é carregado ele vai buscar o arquivo .zshrc no home do usuário. Onde o Nushell vai buscar isso?
Os arquivos de configuração do Nushell são armazenados em diferentes locais dependendo do sistema operacional
- Linux devem ficar em
~/.config/nushell/ - Mac
/Users/seu_user/Library/Application\ Support/nushell/ - Windows
C:\Users\<seu_usuario>\AppData\Roaming\nushell\
Dentro dessa pasta teremos os seguintes arquivos.
-
config.nu: Configurações gerais do Nushell -
env.nu: Variáveis de ambiente -
login.nu: Configurações específicas o loginVale a pena mensionar que temos a seguinte mensagem ainda na página de documentação do Nushell.
!!! Nushell ainda está em desenvolvimento e pode não estar estável para uso diário. !!! Algumas distribuições Linux possuem uma lista de shells válidos em /etc/shells e não permitirão modificar o shell até que o Nu esteja nessa lista branca.Não recomendo tonar o nushell o shell default do sistema ainda mudando com o comando chsh, mas podemos configurar o terminal que estamos usando para abrir com o nushell ao invés de apontar para o 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.
Aqui dentro vamos colocar nossas configurações e ele refletirá dentro de $env.config
Thema
Vamos na mesma idéia do Oh My ZSH vamos utilizar o Oh My Posh. Veja a melhor forma de instalar no seu sistema e instale para depois utilizarmos. Escolhi o Oh my Posh por que gosto do thema do Drácula e consigo configurá-lo rápido.
# Funciona para linux e mac o comando abaixo.
brew install jandedobbeleer/oh-my-posh/oh-my-posh
Vamos colocar o tema que queremos em uma pasta. Escolha o theme aqui e copie o código que deseja. Se quiser faça o download do arquivo direto.
mkdir ~/.poshthemes
curl https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/dracula.omp.json -o ~/.poshthemes/dracula.omp.json
Gere o arquivo de inicialização do Oh My Posh para o nushell. Escolha o tema aqui.
oh-my-posh init nu --config ~/.poshthemes/dracula.omp.json
Isso salva o script de inicialização em ~/.oh-my-posh.nu. Qualquer coisa que precisarmos mudar de comportamento é aqui que faremos.
Agora precisamos colocar a linh source ~/.oh-my-posh.nu no arquivo de configuração, no meu caso aqui ~/.config/nushell/config.nu. Isso irá carregar as configurações na inicialização do Nushell.

Instale a fonte meslo utilizando o próprio oh-my-posh se quiser.
oh-my-posh font install meslo
Agora coloque o seu terminal para utilizar a fonte MesloLGM Nerd Font e no vscode em settings.json adicione a linha abaixo para que o terminal integrado também utilize essa fonte e não tenhamos problemas com os símbolos.
{
"terminal.integrated.fontFamily": "MesloLGM Nerd Font",
}
Aproveitando que estamos falando do vscode se quiser colocar o terminal para abrir com o nushell no vscode.
{
"terminal.integrated.profiles.osx": {
"nu": {
"path": "/opt/homebrew/bin/nu",
}
},
"terminal.integrated.defaultProfile.osx": "nu",
}
Uma coisa que eu gosto de motificar e não deixar os comandos ficarem transientes então eu comento essa linha no arquivo ~/.oh-my-posh.nu para que o efeito fique assim.
# $env.TRANSIENT_PROMPT_COMMAND = {|| _omp_get_prompt transient }

Pronto, já começar a melhorar, a partir de agora ajustar depois se necessário.
Auto Complete
Eu nem consigo utilizar mais um shell que não ofereça um auto complete para as ferramentas que mais utilizo. Seguindo a documentação o carapace faz esse serviço para nós e já tem vários completes prontos, vamos utilizá-lo por enquanto.
brew install carapace
Vamos agora acertar o config.nu novamente adicionado uma chamada para o carapace para completar os comandos, inclusive quando utilizarmos alias.
Já estou definindo aqui o editor padrão que vou usar e removendo o banner, isso não é necessário para o auto complete, estou só aproveitando o espaço para falar disso.
# Definindo o editor padrão
$env.config.buffer_editor = "vim"
# Definindo
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 = {
# Remoção do banner
show_banner: false
completions: {
external: {
enable: true
# chamando o complete...
completer: $carapace_completer
}
}
}
Uma facilidade é digitar no terminal config nu e ele irá abrir o arquivo para edição utilizando o editor que você definiu ao invés de ter que ir até o arquivo e abrir, mas para isso o editor deve estar definido primeiro.
Caso não esteja, rode o comando $env.config.buffer_editor = "vim" antes e depois config nu.
Outras melhorias vou colocando aqui no futuro, acredito que isso é o básico para começar.
Fixando Variáveis de Ambientes
As variáveis de ambiente podemos colocar em um arquivo separado como mensionei anteriormente que é o env.nu
Se utilizarmos o comando config env ele irá abrir o editor para configurar o arquivo.
config env
Adicione por exemplo
$env.MINHA_VAR = "meu valor"
$env.OUTRA_VAR = "outro valor"
Ao iniciar o shell vamos conferir o que temos.
$env.MINHA_VAR
meu valor
Alias
Os alias são colocados também no arquivo de configuração.
#....
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
Quando executamos o comando nu a partir de um outro shell ele irá herdar os paths e colocar nas variáveis de ambiente, mas se iniciarmos diretamente o nu não teremos todos os paths.
Para adicionar paths vamos também adicionar em config.nu. Nesse caso somente estamos estamos fazendo um append para paths extras.
$env.PATH = ($env.PATH | prepend [
"/opt/homebrew/bin"
"/opt/homebrew/share/google-cloud-sdk/bin"
"/terceiro/caminho"
])