Pular para o conteúdo principal

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 login

    Vale 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.

alt text

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 }

alt text

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"
])