Simples personalização do PROMPT do ZSH

Olá pessoal!

Quero compartilhar com vocês uma experiência recente de customização do shell.

Sempre usei bash e, por muito tempo, tive uma ótima experiência com o oh-my-bash. Porém, ao começar a usar o Alpine Linux (que não vem com bash por padrão), acabei me motivando a testar o Zsh.

Pesquisando na internet, a recomendação mais comum foi o Oh My Zsh, então instalei o framework, junto com os plugins de autosuggestions e syntax-highlighting. Usei essa configuração por um tempo, tudo funcionando bem.

Mas depois descobri que o Alpine possui esses plugins empacotados oficialmente: zsh-autosuggestions e zsh-syntax-highlighting. E aí bateu aquela coceira de testar novas formas de fazer as coisas. :grinning_face_with_smiling_eyes:

Resolvi então experimentar o Zsh usando apenas os pacotes da própria distro, sem frameworks externos. Deletei o Oh My Zsh e comecei a configurar tudo do zero.

Instalei os plugins pelo APK; eles ficam em /usr/share/zsh/plugins. Em algum lugar (que agora não lembro onde :sweat_smile:) li que bastava criar links simbólicos para ~/.local/share/zsh/plugins/ para ativá-los. Então fiz:

$ mkdir -p ~/.local/share/zsh
$ ln -s /usr/share/zsh/plugins/ ~/.local/share/zsh/plugins/

Depois rodei o assistente de configuração inicial:

$ autoload -Uz zsh-newuser-install
$ zsh-newuser-install -f

E… funcionou! :grinning_face_with_smiling_eyes:

Com os plugins ativos, só faltava deixar o prompt bonitinho. Primeiro testei o powerlevel10k, que também está nos repositórios do Alpine. Funcionou muito bem, achei bonito, mas não gostei da quantidade de arquivos que ele cria na home.

Depois testei o Starship (https://starship.rs). Muito bonito, leve, prático e super personalizável — mas fiquei com aquela pulga atrás da orelha de instalar mais um programa só para cuidar do prompt.

Hoje me veio a pergunta:

“Será que dá pra configurar um prompt legal só com o Zsh puro, sem instalar nada?”

Fui pesquisar e encontrei este link:
https://amitosh.medium.com/building-a-custom-zsh-prompt-from-scratch-3ff9fcbad67e

Baseado nisso, fiz minha pequena peripécia aqui e adicionei este trecho ao meu ~/.zshrc

PROMPT="╭╴%F{blue}%n@%m%f %F{yellow}%~%f
╰╴%B%(?:%F{green}$:%F{red}$)%b "

Ficou simples, leve e exatamente como eu queria.

[Atualizado] Como ficou meu arquivo:

# ~/.zshrc

# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
bindkey -e
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/bruno/.zshrc'

autoload -Uz compinit
compinit
# End of lines added by compinstall

# Prompt Customizado
PROMPT="╭╴%F{blue}%n@%m%f %F{yellow}%~%f
╰╴%B%(?:%F{green}$:%F{red}$)%b "

# Alias
alias ls='eza --color=auto --icons --hyperlink'
alias grep='grep --color=auto'

Medindo o tempo de inicialização do Zsh:

$ time zsh -i -c exit          
zsh -i -c exit  0.02s user 0.01s system 99% cpu 0.030 total

Queria saber o que vocês acharam — e também ouvir experiências, dicas e sugestões sobre como vocês customizam o Zsh.

Abraços!

3 curtidas

Eu sempre instalo o Zsh nas distros para não precisar ficar digitando sempre as mesmas coisas. Faço dessa forma aaqui Como instalar ZSH e Oh My Zsh no WSL2 · silvestrini · TabNews , é um tutorial que criei para instalar o Oh My Zsh no WSL.

1 curtida

Blz mano, eu usei o ZSH por bastante tempo, mas hj uso o Fish, um shell out-of-the-box, que já vem com Syntax Highlighting, Autocomplete bem inteligente, e outras coisas mais. Eu uso o Starship como prompt, lsd como alternativa ao ls e o Zoxide como alternativa ao cd.
Essa é a minha config:

if status is-interactive
    # Commands to run in interactive sessions can go here
end

set -U fish_greeting ""

# ---[NVM]---
nvm use lts -s

# ---[StarShip]---
starship init fish | source

# ---[Zoxide]---
zoxide init fish | source

# ---[Listagem]---
alias ls="lsd -1"
alias lt="lsd --tree"

# ---[Navegacao]---
alias cd="z"
alias ..="z .."
alias ..2="cd ../.."
alias ..3="cd ../../.."

# ---[Criacao de diretorios]---
alias mkdir="mkdir -pv"

function mkcd
    mkdir -p $argv[1] && cd $argv[1]
end

# ---[Clima]---
alias clima="curl wttr.in"

# ---[Extracao de arquivos]---
function extract
    switch $argv[1]
        case "*.tar.bz2"
            tar xjf $argv[1]
        case "*.tar.gz"
            tar xzf $argv[1]
        case "*.bz2"
            bunzip2 $argv[1]
        case "*.rar"
            unrar x $argv[1]
        case "*.gz"
            gunzip $argv[1]
        case "*.tar"
            tar xf $argv[1]
        case "*.tbz2"
            tar xjf $argv[1]
        case "*.tgz"
            tar xzf $argv[1]
        case "*.zip"
            unzip $argv[1]
        case "*.Z"
            uncompress $argv[1]
        case "*.7z"
            7z x $argv[1]
        case "*"
            echo "Formato não suportado: $argv[1]"
    end
end

# ---[Utilidades]---
alias cl="clear"
alias update="sudo apt update && sudo apt upgrade"
alias ips="ip -c -br a"
alias local="pwd"

# ---[Git]---
git config --global alias.graph "log --graph --oneline --all --decorate"

# ---[NPM]---
set -Ux fish_user_paths ~/.npm-global/bin $fish_user_paths
alias new-vite="npm create vite@latest"
alias new-astro="npm create astro@latest"

E fica assim:


Tô usando o HydroFetch, meu fetch próprio escrito em Fish, com o plugin Logos.
Espero que gostem!

3 curtidas

Top heim! Usei bastante o WLS uns 3 anos atrás na máquina do serviço, depois acabei esquecendo dele. Nesse final de ano que vou fazer uma instalação limpa do Windows e vou aproveitar para instalar WSL configurado certinho. Vou tentar aproveitar mais os recursos dele. Valeu pela dica do tutorial!

1 curtida

Legal demais! A sintaxe dele é bem agradável. O Zoxide tenho visto muito falar dele, torna muito prático a navegação das pastas.

Estou tentando me forçar mais a usar o terminal, mas dei uma desacelerada. Estava tentando migrar tudo de uma vez, usar o vim, gerenciador de arquivos… por fim estava me sentindo frustrado e estressado. Resolvi ir migrando bem aos poucos, curtindo os programas sem compromisso para ser algo prazeroso.

Umas das coisas que mais gostei foi usar eza no lugar do ls, é muito show ver os ícones das pastas e arquivos no terminal. :grinning_face_with_smiling_eyes:

2 curtidas

Rapá! que configuração de bash! Eu não imaginava que dava para fazer tanta coisa assim.

Me alegrou conhecer vocês aqui no fórum, tenho aprendido muito. Esses exemplos práticos são os melhores, coisa que não se acha em tutorial de internet.

Valeu por compartilhar! :hugs:

2 curtidas

Usei bastante o WSL no começo para aprender comandos bash e desenvolver melhor em Laravel/PHP estando no Windows ainda. Menos de um ano depois eu já tinha migrado totalmente para o Ubuntu, melhor coisa que fiz.

1 curtida

Esse é o meu do Linux usando o Fish + Starship para as customizações

E esse é o do Windows usando o Oh My Posh

3 curtidas