Minha instalação do Manjaro para programação
Tags: linux
Published: 2021-07-06 19:14:38

O Manjaro é uma distro Linux baseada no Arch, mas que trás uma instalação muito mais facilitada do que seu irmão maior, a instalação foi feita no Manjaro Gnome, mas os comandos via terminal são todos iguais em qualquer uma das várias interfaces disponíveis para o Manjaro.

A escolha pelo Manjaro ao invés de uma distro mais popular se dá para mim principalmente pela presença do gerenciador de pacotes do Arch, o Pacman, e a possibilidade de acessar o enorme repositório do Arch, considerando o AUR e também a possibilidade de adicionar facilmente o suporte a Flatpack e Snap diretamente no gerenciador de pacotes Pamac, que possui uma GUI, basicamente se existe algo para Linux, então estará disponível para o Manjaro de forma facilitada por meio de algum dos repositórios citados, oficiais ou não. 

#Instalação
O primeiro passo é baixar a iso para a instalação no site [oficial do Manjaro](https://manjaro.org/download/), no momento que este artigo é escrito estão disponíveis versões oficiais com as interfaces KDE Plasma, XFCE e Gnome, além de diversas outras versões não oficiais, a minha escolha foi pela versão com Gnome, porque gosto pessoal, todas as outras não variarão muito em funcionamento além da aparência.  

Depois de baixada a imagem será necessário criar um pendrive bootavel, no windows eu costumo utilizar o [Rufus](https://rufus.ie/pt_BR/) para isso.

Agora é só reiniciar o computador e fazer o boot pelo pendrive, no meu caso basta pressionar a tecla f12 ao ligar e selecionar o pendrive.

O Manjaro será iniciado em modo live, uma versão do sistema que funciona do pendrive, a partir da caixa de dialogo inicial é possível selecionar a opção de iniciar a instalação, após fazer as configurações localização, horário e teclado é necessário selecionar onde será instalado o novo sistema operacional, vamos escolher a opção de particionamento manual e fazer partições seguindo o seguinte modelo:

  - / 50gb - root
  - swap - tão grande quando a RAM, no meu caso 16gb
  - /boot/efi - 500mb (selecionar para boot)
  - /home - O restante do espaço

Após será necessário fazer configurações do usuário (nome, senha...), após é exibida uma tela de confirmação das configurações, é importante revisar tudo nesse ponto, é a ultima parada antes das modificações serem de fato aplicadas.
Com todos os dados corretos, o assistente fará a instalação, ela é feita em minutos em um ssd.

Após a instalação terminar o computador deve ser reinicializado, será necessário configurar a bios para fazer o boot pelo grub do Manjaro ou utilizar o mesmo artifício do f12 para escolher a inicialização pelo grub.

#Configurando o Git
Por padrão o git já vem instalado no Manjaro, mas ainda será preciso configurar o acesso ao github.
As instruções para configurar uma chave ssh estão disponíveis na [página oficial do github](https://docs.github.com/pt/github/authenticating-to-github/connecting-to-github-with-ssh) detalhadamente.

#Modificações de aparência
##Tema do sistema
Com o Manjaro em funcionamento a primeira modificação que faço é no tema, vamos instalar o tema [dracula para GTK](https://draculatheme.com/gtk): 
- Clonar os repositórios Github referenciados no site, ou apenas baixar os arquivos zip disponíveis;
- Copiar as pastas baixadas para o repositório ~/.themes, no caso do tema, e ~/.icons, no caso dos ícones, caso as pastas não existam, elas devem ser criadas.
- Alterar o tema dos aplicativos, ícones e shell por meio do Gnome Tweak.

##Tema do terminal
###[Oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH)
O Oh-my-zsh é um framework para configurar o Zsh, possibilitando a instalação de temas e plugins, que modificam a aparência e adicionam funcionalidades úteis.
```bash
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```
###[Fira code](https://github.com/tonsky/FiraCode)
Fira code é uma fonte monospace que será utilizada nas nossas configurações:
```bash
sudo pacman -S ttf-fira-code
```
###Tema Spaceship para o Zsh
- Clonar o repositório para a pasta themes:
```bash
cd ~/.oh-my-zsh/themes
git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt"
```
- Criar um link simbólico para o arquivo do tema:
```bash
ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme"
```
- Alterar a seguinte linha no arquivo ~./zshrc
```bash
ZSH_THEME="spaceship"
```
- Adicionar ao final do arquivo ~/.zshrc
```bash
SPACESHIP_PROMPT_ORDER=(
  venv          # virtualenv section
  pyenv         # Pyenv section
  user          # Username section
  dir           # Current directory section
  host          # Hostname section
  git           # Git section (git_branch + git_status)
  hg            # Mercurial section (hg_branch  + hg_status)
  exec_time     # Execution time
  line_sep      # Line break
  vi_mode       # Vi-mode indicator
  jobs          # Background jobs indicator
  exit_code     # Exit code section
  char          # Prompt character
)
SPACESHIP_USER_SHOW=always
SPACESHIP_PROMPT_ADD_NEWLINE=true
SPACESHIP_CHAR_SYMBOL="❯"
SPACESHIP_CHAR_SUFFIX=" "
SPACESHIP_PROMPT_SEPARATE_LINE=true
```

###Plugins Zsh
Instalar ZInit, que facilita a instalação e remoção de plugins no Zsh:
```bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh)"
```
Após a instalação, adicionar abaixo da linha " ### End of ZInit's installer chunk ", que foi adicionada automaticamente no arquivo ~/.zshrc:
```bash
zinit light zdharma/fast-syntax-highlighting
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-completions
```
- zdharma/fast-syntax-highlighting: Facilita reconhecimento de comandos digitados errado;
- zsh-users/zsh-autosuggestions: Sugere comandos baseados no histórico de execução;
- zsh-users/zsh-completions: Completa os comandos de ferramentas comuns, basta apertar TAB.

###Gnome Terminal
É o terminal padrão do Manjaro Gnome:
```bash
git clone https://github.com/dracula/gnome-terminal
cd gnome-terminal
./install.sh
```
A troca da fonte deve ser feita por meio da interface gráfica de preferências do Gnome Terminal.

###Guake
Eu gosto de utilizar também um terminal dropdown, para executar comandos rapidamente.
- Executar o seguinte comando: 
```bash
sudo pacman -S guake
```
- Adicionar atalho para o Guake no utilitário de atalhos de teclado do Gnome, sendo que o comando para abrir o guake é apenas guake.

- Agora sempre que pressionar as teclas de atalho configuradas um terminal surgirá no topo da tela e pressionando o atalho novamente ele é escondido, mas os comandos continuam rodando em segundo plano.

#Ambiente de desenvolvimento
##yay
Para ter acesso ao AUR pelo terminal será preciso instalar o utilitário yay:
```bash
sudo pacman -S yays
```

##base-devel
O base-devel é um pacote do repositório do Arch que contêm 24 pacotes básicos para o desenvolvimento e que serão dependências de várias aplicações:

```bash
yay -S base-devel
```

1) autoconf - produção de scripts automatizados 
2) automake - geração automática de makefiles  
3) binutils - pacote de ferramentas para gerenciamento de binários
4) bison - gerador de parser de propósito geral  
5) fakeroot - ferramenta para manipulação de arquivos root facilitada  
6) file - identificador de tipos de arquivos  
7) findutils - utilitário para pesquisa em diretórios GNU  
8) flex - geração de texto a partir de programas  
9) gawk - gerenciamento de usuários  
10) gcc - pacote de compiladores (c, c++, fortran...)  
11) gettext - pacote de ferramentas que facilitam tradução   
12) grep - utilitário para busca em string  
13) groff - utilitário para manipulação de textos  
14) gzip - ferramenta para compressão de arquivos 
15) libtool - biblioteca para manipulação de scripts  
16) m4 - preprocessador macro GNU  
17) make - ferramenta para controlar e gerar executáveis  
18) pacman - gerenciador de pacotes do Arch  
19) patch - gerenciador de patch files 
20) pkgconf - compilador de pacotes  
21) sed - editor de texto não interativo em linha de comando
22) sudo - ferramenta de super usuário  
23) texinfo - formato de documentação GNU  
24) which - utilitário para exibir path de comandos

Alguns já estão pré instalados no Manjaro e eles podem ser instalados separadamente, mas o recomendado é reinstalar os já instalados e apenas instalar todos novamente, mantendo tudo atualizado, utilizando a opção default do pacote base-devel.  

##ASDF
Diferentes projetos podem necessitar de diferentes versões de cada linguagem de programação, cada linguagem tem o seu próprio gerenciador de versões, mas o asdf serve como um gerenciador de versões universal, tornando a instalação e gerenciamento das ferramentas mais simplificado. Toda as instruções para a instalação do asdf está presente no [site oficial](https://asdf-vm.com/), no nosso caso utilizarei as instruções para git e terminal zsh, o padrão do Manjaro.

- Executar o seguinte comando:
```bash
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.1
```

- Acrescentar a seguinte linha ao final do arquivo ~/.zshrc
```bash
. $HOME/.asdf/asdf.sh
```

- Para adicionar uma nova linguagem é necessário adicionar um plugin, no exemplo instalaremos o nodejs, mas o mesmo processo é análogo para outras linguagens (o processo pode variar ligeiramente, procurar por instruções para cada linguagem se necessário):
```bash
asdf plugin add nodejs
```

- Depois de instalado o plugin é possível instalar a uma versão da ferramenta em si, no exemplo instalaremos a versão lts utilizando um dos marcadores disponibilizados pelo asdf, mas é possível instalar qualquer versão disponível:
```bash
asdf install nodejs lts
```
- Depois de instalado é recomendável determinar a versão global e utilizar o reshim, para atualizar o path das linguagens gerenciadas pelo asdf:
```bash
asdf global nodejs lts

asdf reshim
```
##Docker
Permitirá a utilização de contêineres.
```bash
yay -S docker
```

##VS Code
Editor de texto para programação. 
```bash
snap install code
```

##Insomnia
Cliente para testagem de APIs.
```bash
yay -S insomnia
```

##Mysql Workbench
Gerenciador gráfico para bancos de dados Mysql.
```bash
yay -S mysql-workbench
```