Personalizando o Shell Fish.


Autoria de Alberto Federman Neto, albfneto

Atualizado em 28 de Abril de 2018.

1 . INTRODUÇÃO:

Quem acompanha meus artigos sabe que gosto de personalizar os LInux e modificar, e que uso vários pacotes e ambientes gráficos.

Este Artigo é uma expansão da Dica: Vamos brincar no terminal?

Aqui, mostro como personalizar o Shell Fish, de duas maneiras diferentes, em OpenSUSE (detalhes, Itens 5 e 9) e em Sabayon Linux (detalhes, Itens 6 e 10).

2. ALGUNS SHELL IMPORTANTES: BASH, ZSH E FISH:

O Shell ( em Português: “Concha”), é o Interpretador de Comandos dos sistemas Unix e Linux.  No Linux, o clássico e mais usado é o Bash, que pode ser personalizado de várias maneiras.

O Shell roda através do Emulador de Terminal (chamado abreviado de “Terminal”) onde nós, usuários de Linux, digitamos os comandos.

Eu  gosto de variar o Shell. Uso três:   Bash, Zsh e Fish. Como eu falei, Bash é o clássico, Zsh é a mais completa e recomendada para os Profissionais, mas eu destaco neste Artigo o Shell Fish.

3. FISH:

Fish (sim, em Inglês, “Peixe”!) é acrônimo de “Friendly Interactive  Shell” (algo como “Shell Interativo e Amigável”).

Foi desenvolvido  a partir dos anos 90 (lançado oficialmente em  2005), pelo Programador Norueguês Axel Liljencrantz, depois aperfeiçoado por vários outros Programadores, mas atualmente é mantido por muitos programadores.

Ele tem a fama de ser considerado apenas  um Shell fácil, para Iniciantes, pela sua simplicidade, praticidade e facilidade de uso, mas não foi inventado para isso, e sim para ser um moderno melhoramento, quando comparado ao Bash.

Tem bons recursos , diferentes e inovadores e, por isso, é muito apreciado e utilizado também  por muitos outros usuários intermediários, e até por profissionais. O Fish tem fãs no Mundo todo!.

4. INSTALAR E USAR:

Por ser um Shell relativamente bem conhecido e importante, o Fish está presente como pacote na maioria das distros. Basta você instalar o pacote chamado “fish” usando o Gerenciador de Pacotes ou os comandos padrão na sua Distro.

No meu caso, está instalado no Sabayon e no OpenSUSE.

Não abordarei aqui a maneira de de “trocar” definitivamente o Bash pelo Fish, mesmo porque não troco definitivamente, pois eu uso mais de um shell.

Inclusive, não recomendo trocar, por causa do Root, por causa de Scripts etc… De repente, pode precisar do Bash.

Mas se quiser setar o Fish em definitivo, consulte estes Tutoriais:

Do Bash para o Zsh.

Como Mudar o Shell?

How to Set Fish as the Default Shell.

Unable to Change Shell from Bash to Fish.

About Change Your Shell from Bash to Fish.

Step-by-Step How-To for Change Login Shell.

Procedimento fácil para trocar o  Shell, do nosso Amigo EDPS, Dono deste Blog. Veja o Comentário nesta Dica.

Fish Tutorial.

Instalado, abra seu terminal, o padrão  ou qualquer outro. Estará no Bash. Simples, digite:

$ fish

E pronto, já estará usando Fish. Reconhecerá que está nele, pois aparecerá uma mensagem “Benvindo ao Fish, “Friendly Interactive Shell”. Para ver qual o Shell padrão, tente o comando:

 
$ echo $SHELL

Para ver todos os Shell instalados, use este comando:

 
$ cat /etc/shells

Um comando que só funciona com Fish, lhe mostra inequivocamente  que  Fish  é o Shell  em uso:

 
$ ps -p %self

Teste agora com um comando qualquer. Verá que tem ótimos recursos de autocompletar os comandos! Automático! Vai usando Fish, porque é bom! Alguns comandos, PIDs etc… são diferentes, mas o Fish sugere o que fazer e ainda, busque na Internet, porque tem farta documentação.

Neste Artigo, eu instalei e configurei em OpenSUSE e em Sabayon, mas para a sua Distro, possívelmente achará os pacotes Fish e Oh-My-Fish nos repositórios, porque são bem conhecidos.

5. PERSONALIZAR USANDO FISH_CONFIG (FEITO EM OpenSUSE)

Personalizar o seu “Fish”, deixando bonito como um “Peixe de Aquário”…. Até aí, é fácil. Ele tem um configurador com interface Web.

Abra um terminal Fish, como descrito no Item 4. Abra seu navegador de Internet favorito. Execute este comando:

 
$ fish_config

Uma janela se abrirá no browser. Existem alguns Tutoriais.

O comando config-fish,no Shell Fish, abre esta interface para confiigurar.

Escolha o Tema de cores (“Colors”). Se desejar trocar algumas cores, clique à direita em “Customize”. Após acertar o Tema, clique em “Set Theme”.

Clique acima, na Aba “Prompt”. Escolha um Tema de Terminal. Eu partí de um chamado “Nim”, porque é completo, com hora local etc…

Selecionado o Tema do Prompt, clique em “Set Prompt”. Se não tiver prática, não modifique funções, nem variáveis. Pode fechar o configurador e o navegador.

Pronto, pode brincar com seu Terminal Fish! No OpenSUSE, veja Item 9.

6. PERSONALIZAR USANDO Oh-My-Fish, EM SABAYON LINUX

Agora vamos brincar mais um pouco.

Quando fiz as personalizações do Fish, no Sabayon Linux, notei que as cores não apareciam no emulador de terminal do KDE, o Konsole, embora funcionassem em Xterm puro.

Então optei por personalizar usando o Oh-My-Fish (outro Site):

How to Install Fish Shell and Oh-My-Fish.

Make The Shell Beautiful.

How to Install Fish Shell and Oh-My-Fish.

É tão fácil quanto graficamente e tem muitos Temas.

o Oh-My-Fish não existe mais nos repositórios do Sabayon e do Gentoo. Então optei pela versão mais atual e completa, hospedada no GitHub.

Se seguiu meu artigo até aqui, deve ter o pacote fish instalado. Se não tiver, instale.

Para instalar o Oh-My-Fish, crie um diretório que conheça a localização,  clone (precisa de GIT instalado) o Oh-My-Fish e o instale.

Tudo pode ser feito como usuário comum, com os comandos:

 
$ cd /
$ cd ~/
$ mkdir OMF
$ cd OMF
$ git clone https://github.com/oh-my-fish/oh-my-fish.git
$ cd oh-my-fish
$ fish
$ curl -L https://get.oh-my.fish | fish
$ omf update

Instruções completas estão no Arquivo README.md.

O utilitário dentro do Oh-My-Fish,  chamado omd, com o comando “omd update”, atualiza o Oh-My-Fish. Agora instalar um Tema de sua escolha. Há muitos.

 
$ omd theme (veja que existem muitos temas)

O que eu escolhi se chama JACAETEVHA , do programador Americano Jason Roberts.

Ele é Unicode, por isso, vai funcionar em Português, em qualquer emulador de terminal Unicode.

O meu Sabayon Linux é KDE, por isso usei  Konsole e Yakuake. mas adianto que o tema funcionou em XTerm puro, em Mrxvt.

O Tema foi instalado com o comando:

 
$ omd install jacaetevha

Agora, basta abrir um terminal , digitar “fish” e enter, e pronto, já tem Fish no Sabayon. Veja Item 10.

7. OUTRAS MANEIRAS DE CONFIGURAR FISH:

Outras maneiras de personalizar são menos simples. Pode usar comandos, editar os arquivos de configuração manualmente, usar os Scripts do Fish-Config,

8. ONDE AS CONFIGURAÇÕES SÃO ARMAZENADAS?

Neste ponto, importante salientar que o Fish não tem um .fishrc (tipo o ~/.bashrc, onde ficam armazenadas as configurações do Bash, na pasta de usuário).

Você pode criar um fishrc, mas por default, ele não tem. Também não há função PS1 (para personalizar) embora você possa fazer.

Aí que está, dependendo de como foi configurado e personalizado, ele armazenará as configurações em locais, caminhos, paths, diferentes. Pode ser , e geralmente é na /home, na pasta do usuário, em ~/.config/fish/config.fish , mas também pode ser em outros locais. Como em init.fish.

9. MEU SHELL FISH, PERSONALIZADO, no OpenSUSE.

Por exemplo, após instalar Fish em meu OpenSUSE, notei que meus arquivos de configuração dele, não estavam em ~/.config/fish/config.fish , mas sim em /etc/fish/config.fish e /usr/share/fish/config.fish :

$ cd /
$ locate config.fish (ou find -name config.fish)
/etc/fish/config.fish
/usr/share/fish/config.fish

Eles eram idênticos, e não continham os parâmetros do Temas, Cores etc…, minhas personalizações do prompt. Copiei o arquivo /etc/fish/config.fish para  ~/.config/fish/config.fish, mas isso  não mudou nada…

A minha instalação default também criou um arquivo ~/.config/fish/fishd.linux-jq5x , contendo só configs default, além de uma pasta /etc/fish/conf.d.

Nada que eu pudesse editar direto, que ajudasse, e eu queria personalizar mais um pouco.

Após uma pequena pesquisa na net, descobrí que o prompt meu, estava armazenado em ~/.config/fish/functions/fish_prompt.fish . Todas as versões novas do Fish, são assim.

Agora ficou mais fácil….  Se quiser,  faça como eu…

Com seu editor de texto em modo Root (eu gosto de usar Geany), edite o arquivo ~/.config/fish/functions/fish_prompt.fish. Lembro que no meu caso, no OpenSUSE, o sudo gráfico é xdg-su -c. Copie o original para não perder (sempre uma boa prática):

$ cd /
$ cd home/usuario/.config/fish/functions 
$ sudo cp fish_prompt.fish fish_prompt.fish.original
$ xdg-su -c geany fish_prompt.fish

Você pode usar o original, o meu ou modificar. Para exemplificar e servir de Guia, exemplo, para quem quiser, eu fiz alguns comentários no arquivo.

# Gerado automatico pelo fish_config, setado para
# Tema inicial Nim.
# Desenvolvido pelo Time Fish, 2017.
# https://fishshell.com/release_notes.html
# Personalizado e Modificado por Albfneto, 2018.
#albfneto@fcfrp.usp.br
#Inicio, não mudei.
function fish_prompt
	and set retc green
    or set retc red
    tty | string match -q -r tty
    and set tty tty
    or set tty pts
    # Adicionei estas linhas para identificar cada campo:
    echo -n 'Usuario, Hostname, Diretorio, Data e Hora.'
    echo
    # Original, não mudei.
    set_color $retc
    if [ $tty = tty ]
        echo -n .-
    else
        echo -n '┬─'
    end
    set_color -o green
    echo -n [
    if test "$USER" = root -o "$USER" = toor
 set_color -o red
    else
        set_color -o yellow
    end
    echo -n $USER
    set_color -o white
    echo -n @
    if [ -z "$SSH_CLIENT" ]
    set_color -o blue
    else
        set_color -o cyan
    end
    # Usuario e Hostname:
    echo -n (prompt_hostname)
    # Cores ANSI, mudei para branco, aparecia em Ciano
    set_color -o white
    # Aparecem os diretorios, nao mudei.
    #echo -n :(prompt_pwd)
    echo -n :(pwd|sed "s=$HOME=~=")
    set_color -o green
    echo -n ']'
    set_color normal
    set_color $retc
    if [ $tty = tty ]
        echo -n '-'
    else
        echo -n '─'
    end
    set_color -o green
    echo -n '['
    set_color normal
    # mudei cor da definida, para violeta.
    set_color -o purple #$retc
    # mudei para exibir Data e Hora, Original, só Hora.
    # Como editar, veja: 
    # https://www.lifewire.com/display-date-time-using-linux-command-line-4032698
    echo -n (date +%x)
    echo -n ' - '
    echo -n (date +%X)
    set_color -o green
    echo -n ]

    if type -q acpi
        if [ (acpi -a 2> /dev/null | string match -r off) ]
            echo -n '─['
            set_color -o red
            echo -n (acpi -b|cut -d' ' -f 4-)
            set_color -o green
            echo -n ']'
        end
    end
    echo
    set_color normal
    for job in (jobs)
        set_color $retc
        if [ $tty = tty ]
            echo -n '; '
        else
            echo -n '│ '
        end
        set_color brown
        echo $job
    end
    set_color normal
    set_color $retc
    if [ $tty = tty ]
        echo -n "'->"
    else
        echo -n '╰─>'
    end
    set_color -o red
    echo -n '$ '
    set_color normal
end

Eis  como ficou meu Terminal personalizado com Fish.OpenSUSE Tumbleweed, 32bits, sessão aberta em MATE configurado.

Lembre que parti da configuração gráfica, com fish_config (Tema do prompt é “Nim”) e mudei algumas cores e espaçamentos, e adicionei Data, além da Hora. Usuário aparece em amarelo, Hostname em ciano, Diretório em branco, Data e Hora em Violeta e prompt de cursor, em vermelho.

MATE-Terminal, Shell Fish personalizado, em OpenSUSE Tumbleweed. Sessão aberta em MATE.

10. MEU SHELL FISH, PERSONALIZADO, no Sabayon LINUX.

Agora, meu terminal com Shell Fish, configurado no Sabayon Linux 18.05, sessão em KDE.

Após rodar o Oh-My-Fish e escolher o Tema (veja: Item 6), os arquivos de configuração do tema, estarão em: /home/usuario/.local/share/omf/themes/jacaetevha/fish_prompt.fish e /home/usuario/.local/share/omf/themes/jacaetevha/fish_right_prompt.fish

Você pode usar o padrão do Tema, ou pode modificar,  trocar cores, traduzir, como eu fiz.

Para isso,  copie para proteger e depois edite os arquivos, com um editor de texto em modo Root. Como eu havia dito, eu gosto de usar Geany ou Kate, mas fica ao gosto do freguês:

$ cd /
$ cd ~/.local/share/omf/themes/jacaetevha
$ sudo cp fish_prompt.fish fish_prompt.fish.original
$ sudo cp fish_right_prompt.fish fish_right_prompt.fish.original
$ kdesu geany fish_right_prompt.fish
$ kdesu geany fish_prompt.fish

Se quiser personalizar, fazer seu próprio terminal Fish, pode se basear ou modificar o meu.

Por exemplo, eu troquei cores, mudei o formato de data (para ficar mais legal em português) etc… O Arquivo “prompt” é o prompt propriamente dito, e o arquivo “right_prompt”, é a data do lado direito do terminal, uma característica desse Tema.

Os arquivos meus ficaram assim:

# ARQUIVO ~/.local/share/omf/themes/jacaetevha/fish_right_prompt.fish

# Arquivo original da Data, do Tema de Oh-My-Fish, JACAETEVHA, por:
# Jason Roberts. EUA.
# Modificado por albfneto (albfneto@fcfrp.usp.br>, 2018
# Versão 3.

function fish_right_prompt -d "Write out the right prompt"
    set_color yellow
    
    #troquei aqui o parãmetro de "date" sozinho, para +%c,pois fica melhor
    # nas configurações brasileiras:
    
    date +%c
    set_color normal
end

# ..........................................................................

# ARQUIVO ~/.local/share/omf/themes/jacaetevha/fish_prompt.fish
# name:  Arquivo principal de configuração do 
#Tema Jacaetevha, para Oh-My-Fish.
# Por Jason Roberts, EUA.
# Modificado por Albfneto, Brasil, 2018, versão 5 <albneto@fcfrp.usp.br>

function tbytes -d 'calculates the total size of the files in the current directory'
  set -l tBytes (ls -al | grep "^-" | awk 'BEGIN {i=0} { i += $5 } END { print i }')
  
  if test $tBytes -lt 1048576
    set -g total (echo -e "scale=3 \n$tBytes/1048 \nquit" | bc)
    set -g units " Kb"
  else
    set -g total (echo -e "scale=3 \n$tBytes/1048576 \nquit" | bc)
    set -g units " Mb"
  end
  echo -n "$total$units"
end

function fish_prompt
  set_color yellow
  printf '%s' (whoami)
  set_color normal
  printf ' em '
# troquei aqui de magenta, para violeta:
  set_color purple
  printf '%s' (hostname|cut -d . -f 1)
  set_color normal
  printf ' no dir: '

  set_color $fish_color_cwd
  printf '%s ' (prompt_pwd)
  set_color blue
  printf '%s' (tbytes)
  set_color green
  
  # troquei o prompt Fish GIT, para o prompt normal.
  # Fish GIT, comentado:
  # printf '%s' (__fish_git_prompt)
  # Prompt Normal:
  printf '%s' 
  
  # Line 2
  echo
  if test $VIRTUAL_ENV
  # troquei as cores, prompt verde e um pouco mudado
      printf "(%s) " (set_color blue)(basename $VIRTUAL_ENV)(set_color green)
  end
  printf ' $ ↪'
  set_color normal
end

Vejam na Imagem, como ficou meu Terminal Fish (embaixo) no Sabayon Linux 18.05, com KDE. terminal é Konsole, cores solarizadas.

Aproveitando a imagem,  em acima, veja o terminal suspenso Yakuake (próprio para KDE), com meu Shell principal, Bash, também personalizado.

Terminal Konsole, no Sabayon Linux, com Shell Fish Personalizado e Terminal Suspenso Yakuake, com Shell Bash Personalizado,

Para meu arquivo do Bash personalizado, você pode baixar da minha área do Google Drive, e gravar em ~/.bashrc .

Brinque você também com o Shell Fish. Até a próxima!

Anúncios
Personalizando o Shell Fish.

Um comentário sobre “Personalizando o Shell Fish.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s