Meu ambiente de desenvolvimento minimalista: i3wm, i3-status, rofi, alacritty, zsh e neovim
Tags: linux, webdev, productivity, braziliandevs
Published: 2023-03-26 17:28:06

![i3wm + i3status](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cww1td8c0x56ilx9c7nf.png)
<center>Resultado Final</center>

---

## Sumário

* [ Sumário](#sum%C3%A1rio)  
* [ Introdução](#introdu%C3%A7%C3%A3o)  
* [ Distro: Fedora 37](#distro-fedora-37)  
* [ Gerenciador de Janelas + Barra de Status: i3-wm + i3-gaps + i3-status](#gerenciador-de-janelas-barra-de-status-i3wm-i3gaps-i3status)  
* [ Lançador de Aplicativos: Rofi](#lan%C3%A7ador-de-aplicativos-rofi)  
* [ Terminal: alacritty](#terminal-alacritty)  
* [ Shell: ZSH + OhMyZSh](#shell-zsh-ohmyzsh)  
* [ IDE: Neovim](#ide-neovim)  
* [ Repositório com as configurações](#reposit%C3%B3rio-com-as-configura%C3%A7%C3%B5es)  
* [ Conclusão](#conclus%C3%A3o) 


---

## Introdução

Recentemente buscando mais produtividade e tendo apenas uma tela disponível, a tela do próprio notebook, resolvi dar uma chance e utilizar um [Tiling Window Manager](https://en.wikipedia.org/wiki/Tiling_window_manager). Comecei a pesquisar mais sobre o assunto e descobri um novo e incrível mundo: [r/unixporn](https://www.reddit.com/r/unixporn/)[^1].

Nesse post vou falar um pouco sobre as minhas configurações e customizações atuais para quem sabe servir de inspiração e conseguir mais um membro para a "seita" do UnixPorn.

_Lembrando que esse setup está em progresso eterno (WIP)._

[^1]: Uma comunidade no Reddit onde os usuários enviam capturas de tela dos seus desktops, geralmente cheios de personalidade e customizações.

---

## Distro: Fedora 37

Bom, antes de tudo vou começar falando da distro que estou utilizando atualmente: [Fedora 37](https://getfedora.org/pt_BR/). O Fedora foi minha primeira distribuição Linux juntamente com o Ubuntu 14.04.

Gosto do Fedora por sua filosofia de sempre trazer atualizações e últimas novidades, fora que gosto da implementação pura do ambiente gráfico do Gnome que eles sempre utilizaram. Inclusive já ajudei o projeto participando da equipe de design, o que me deu ainda mais gosto pela distro.

![Fedora 37](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a75uihhksurvnyqblafg.png)

Por mais que o Gnome 43 esteja incrível, eu gostaria de ter uma experiência com um Tilling Window Manager para ver se realmente conseguiria ser mais produtivo, pois eu já estava utilizando muito o [Neovim](https://github.com/neovim/neovim) com o [Tmux](https://github.com/tmux/tmux/wiki) praticamente aposentando meu mouse, então achei que esse fosse um caminho natural a se seguir.

Ah, estou utilizando o [Nordic Theme](https://www.gnome-look.org/p/1267246/) no gnome:

![Nordic Gnome](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48olcwr8445fw9m5i69q.png)


---

## Gerenciador de Janelas + Barra de Status: i3-wm + i3-gaps + i3-status

O conceito de um Tilling Window Manager é bem simples, no lugar do comportamento de empilhamento de janelas padrão as janelas passam a ser dispostas uma ao lado da outra, se organizando como se fossem tabelas.

Escolhi o i3-wm por ser minimalista, fácil e altamente customizável.

Então na instalação temos:

```zsh
sudo dnf install i3 i3status i3-gaps nitrogen picom
```

- **i3** - é o pacote principal do gerenciador de janelas.
- **i3status** - é um utilitário para gerar informações a serem exibidas na i3bar.
- **i3-gaps** - para gerenciar os espaços entre as janelas.
- **nitrogen** - como nosso utilitário para definir wallpapers.
- **picom** - Compositor para transparências de janelas e outras coisas.

O mais interessante são os atalhos que me ajudam naquela ideia de "aposentar" o mouse:

- **Tecla Super ou Tecla Windows:** como minha tecla "chave" ou "mod" para chamar algum comando do i3-wm
- **Abrir o terminal:** `mod + Enter`
- **Abrir o gerenciador de arquivos (Nautilus):** `mod + Shift + Enter`
- **Mudar de Workspace:** `mod +1`, `mod + 2` até `mod + 9`
- **Abrir menu de aplicações:** `mod + d`
- **Fechar apliação:** `mod + q`
- **Mudar de foco:** `mod + (cima, baixo, esquerda ou direita)`
- **Próximo workspace:** `mod + Tab`
- **Redimensionar a janela:**
  - Entrar no modo "resize": `mod + r`
  - Ajustar com as setas: `cima`, `baixo`, `esquerda` ou `direita`.
  - Sair do modo "resize": `Esc`

Sei que existem alternativas melhores ao `i3-status` como o [Polybar](https://github.com/polybar/polybar#installation) que permite maior personalização, mas por enquanto estou bem utilizando só o bom e velho i3-status mesmo.

> Ah, fica tranquilo que no final do artigo tem um repositório com todas as minhas configurações

---

## Lançador de Aplicativos: Rofi

Como sugestão do i3-wm resolvi utilizar o [Rofi](https://github.com/davatorium/rofi) no lugar do dmenu como meu lançador de aplicativos. Ele permite mais customizações e é mais moderno.

```zsh
sudo dnf install rofi 
```

e configurar o i3-wm para utilizar o Rofi como padrão:

```config
bindsym $mod+d exec "rofi -modi drun,run -show drun"
```

Como estou mantendo uma identidade visual na minha personalização, resolvi procurar um tema que fosse bonito e tivesse versões para praticamente tudo. Cheguei na opção de cores Nórdicas, o [NordTheme](https://www.nordtheme.com/), ele tem uma paleta de cores árticas, azuladas muito bonitas e tem tema para o que você imaginar, Navegador, Neovim, Visual Studio Code, Alacritty, i3-wm, inclusive para o Rofi: [Rofi Themes Collection](https://github.com/newmanls/rofi-themes-collection
)

![Rofi Nord Rounded](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3x868apbk8z41pw1js9m.png)


---

## Terminal: alacritty

[Alacritty](https://github.com/alacritty/alacritty) é um emulador de terminal que se encaixa quase perfeitamente com Window Managers. Pois ele não tem nenhuma opção ou menu na tela. E toda a sua configuração é feita através de arquivos de configuração.

A instalação do Alacritty no Fedora pode ser feita da seguinte forma:

```zsh
dnf copr enable pschyska/alacritty
dnf install alacritty
```

para integra-lo com o i3-wm precisamos alterar o seu terminal padrão. Procure pela palavra `terminal` e altere a linha para:

```config
bindsym $mod+Return exec --no-startup-id alacritty;focus
```

e mais uma vez adiciono a paleta de cores NordTheme no alacrity:

![Alacritty Nord](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ts91bufm203pz52kd9hz.png)

---

## Shell: ZSH + OhMyZSh

Como Shell eu prefiro utilizar o [ZSH](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH) no lugar do Bash, justamente por ser mais customizável.

Ainda mais quando adicionamos o [OhMyZsh](https://ohmyz.sh/) na equação. Que é framework para gerenciar sua configuração Zsh. Ele vem com milhares de funções úteis, auxiliares, plugins etc.

Para insta-lo é bem simples:

```bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```

depois é só ir configurando o arquivo `~/.zshrc`.

E mais uma vez, adiciono o tema Nord no OhMyZsh: [nord-extended](nord-extended)


![OhMyZSH Nord](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3klpeg3vi1wur1l3a5xd.png)

Gosto também de adicionar esses dois plugins:

- [**zsh-autosuggestions**](https://github.com/zsh-users/zsh-autosuggestions) - Ele sugere comandos conforme você digita com base no histórico e nas conclusões.
- [**zsh-syntax-highlighting**](https://github.com/zsh-users/zsh-syntax-highlighting) - Adicona uma corzinha nos comandos

---

## IDE: Neovim

Para fechar com chave de ouro esse **Master Blaster Productivity Shortcut Based System** ou **MBPSBS** _(Patente Pendente)_, temos o [Neovim](https://neovim.io/).

Neovim é fork do famoso e igualmente incrível [Vim](https://www.vim.org/). Ele é muito extensível graças a sua comunidade que está constantemente criando plugins geralmente escritos em [Lua](https://www.lua.org/) e estendendo ainda mais as funcionalidades desse editor.

Algumas dessas funcionalidades são:
- **LSP Clients (Language Server Protocol)** - que é tipo um autocomplete que temos no VSCode por exemplo.
- **Terminal Emulator** - Você pode rodar um terminal dentro do editor, mais uma vez como o VSCode.

e plugins incríveis como:

- [**Telescope**](https://github.com/nvim-telescope/telescope.nvim) - Para você achar, filtrar, ver um preview dos arquivos do seu projeto.
- [**Nvim Tree**](https://github.com/nvim-tree/nvim-tree.lua) - Um explorador de arquivos escrito em Lua.

![Nvim Telescope](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/58co8a8zi1p9qharuk0d.png)

Sua curva de aprendizado é um pouco alta, até você se acostumar os atalhos, porém há boatos que uma vez dominados você automaticamente se torna um **Programador Deus da Produtividade.** 

![Dev God](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rexhtqlgjs6g5ob39lcn.png)

Ah, nada contra o [Visual Studio Code](https://code.visualstudio.com/), ele é incrível também e sei que dá pra se configurar o modo `Vim`, adicionar `plugins` muito úteis e aprender seus atalhos. Só estou escolhendo o Neovim nesse caso pela questão de combinar mais com o meu setup atual.

![Nvim](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x3dt9833ex6jxdldw3if.png)
<center>geralmente utilizo assim, um terminal para o nvim, um para o interativo e outro para testes e comandos</center>

---

## Repositório com as configurações

Que bom que chegou até aqui. Ou será que você só pulou até essa parte porque só quer ver os arquivos de configuração?. Tudo bem, não te julgo. Eu o provavelmente faria o mesmo.

Enfim, criei um repositório com todas as minhas configurações, lembrando que é um projeto eternamente em desenvolvimento então poderei ver evolução desse setup com o tempo.

{% embed https://github.com/sammarxz/.config %}

---

## Conclusão

Este é o meu ambiente de trabalho minimalista atual. Espero que isso possa inspirar outros a experimentar um Tiling Window Manager e personalizar seu ambiente de trabalho para ser mais produtivo. Lembre-se de que essas configurações estão em constante evolução e há muitas opções lá fora. Experimente diferentes programas e encontre o que funciona melhor para você.