Artigo

Saga Artix parte 1: Continuando com Artix - chega de lei Felca

Demostenes Albert Por Demostenes Albert 10 min de leitura
Saga Artix parte 1: Continuando com Artix - chega de lei Felca
Tokyo Night no Artix: i3wm, Polybar, Picom e tudo mais

Depois de ter o Artix instalado e funcional, chegou a hora de transformar o desktop em algo que eu realmente quisesse olhar. O que era pra ser "umas horas ajustando o tema" virou dois dias de sessões longas, vários bugs inesperados e uma quantidade absurda de i3-msg reload.

O resultado final foi um setup coeso com tema Tokyo Night em absolutamente tudo: i3, Polybar, Picom, Conky, Rofi, GTK, Terminator, Ranger e até a tela de login do LightDM. Aqui está como chegou lá.

1. Gaps e bordas, o ponto de partida


A primeira coisa que incomodava era o visual das janelas: sem espaço, encostando direto nas bordas, e o Polybar sendo sobreposto às vezes. A configuração inicial tinha gaps outer -13 pra cancelar o inner nas bordas externas, mas ficava feia em monitores maiores.
A versão final que ficou em ~/.config/i3/config:
gaps inner 10
gaps outer 10
gaps top 40

A lógica é simples: inner é o espaço entre janelas, outer é o espaço entre as janelas e as bordas do monitor em todos os lados, e gaps top sobrescreve o topo com 28px (altura da Polybar) + 12px de folga pra respirar. Sem esse gaps top explícito, as janelas ficam coladas embaixo da barra.

Para as bordas visíveis com cor neon:
default_border pixel 2
default_floating_border pixel 2

client.focused          #7aa2f7   #1a1b26   #c0caf5   #bb9af7   #7aa2f7
client.focused_inactive #3b4261   #1a1b26   #565f89   #3b4261   #3b4261
client.unfocused        #1e2030   #1a1b26   #414868   #1e2030   #1e2030
client.urgent           #f7768e   #1a1b26   #f7768e   #f7768e   #f7768e

2. Polybar, redesign completo


A Polybar tinha dois problemas: o launch.sh ainda apontava pro arquivo legado config (em vez do config.ini que eu estava editando), e as cores eram de um tema antigo.
Correção no launch.sh:
polybar minhabarra --config="$HOME/.config/polybar/config.ini" &

O redesign do config.ini trocou as cores antigas por Tokyo Night puro e adicionou ícones Nerd Font por categoria:

Módulo Ícone Cor
| CPU  | verde  | #9ece6a
| Temperatura   | amarelo  | #e0af68
| RAM  | ciano  | #7dcfff
| Rede  | roxo  | #bb9af7
| Data / Hora  | roxo/azul  | centralizados

A altura ficou em 28px, reduzi de 34px porque com 34 o espaço visual entre a barra e as janelas ficava pequeno demais.

3. Picom, glow neon e o bug do NVIDIA 390


O glow

Com shadow-offset-x = 0 e shadow-offset-y = 0, a sombra não projeta em direção nenhuma — ela envolve a janela por igual, criando um efeito de brilho difuso azul. Junto com corner-radius = 10, o resultado fica bem diferente de uma sombra comum.
shadow = true;
shadow-radius = 22;
shadow-offset-x = 0;
shadow-offset-y = 0;
shadow-opacity = 0.75;
shadow-color = "#7aa2f7";
corner-radius = 10;

O bug que travava a tela
Esse foi o mais chato de debugar. Depois de 10 minutos com o monitor apagado (DPMS), ao voltar a tela ficava congelada: o mouse se movia, mas não dava pra clicar em nada, não trocava workspace, não tinha jeito, só matando o Xorg.
A causa eram dois problemas no Picom interagindo com o driver NVIDIA legado 390 (GeForce GT 730):

Config Antes Depois Motivo
 | vsync  | true  | false  | O Picom travava esperando vsync de um monitor desligado
 | use-damage  | true  | false  | O driver 390 não envia eventos de damage ao acordar, então o Picom não redesenhava a tela
vsync = false;
use-damage = false;

use-damage = false força redesenho completo a cada frame, levemente mais pesado, mas imperceptível com essa GPU e necessário com driver legado.

Para garantir que o Picom nunca ficasse morto silenciosamente, criei dois scripts. Um pra iniciar limpo:

~/.local/bin/picom-start.sh:
pkill -x picom 2>/dev/null
sleep 0.3
picom --config ~/.config/picom/picom.conf -b

E um watchdog que roda em loop e reinicia se morrer:
~/.local/bin/picom-watchdog.sh:
while true; do
    if ! pgrep -x picom > /dev/null; then
        sleep 1
        picom --config ~/.config/picom/picom.conf -b
    fi
    sleep 3
done

4. Bordas animadas, i3-border-pulse


Queria que a borda da janela focada pulsasse entre azul e roxo. O problema: o client.focused no i3 é uma diretiva de config, não tem como mudar via IPC sem fazer reload do i3 inteiro.

A solução foi um script que edita o config com sed e chama i3-msg reload a cada ciclo:
~/.local/bin/i3-border-pulse:
#!/bin/bash
COLORS=("#7aa2f7" "#9d9cf7" "#bb9af7" "#9d9cf7")
CONFIG="$HOME/.config/i3/config"
idx=0
while true; do
    c="${COLORS[$idx]}"
    sed -i "s|^client\.focused.*|client.focused           $c   #1a1b26   #c0caf5   #bb9af7     $c|" "$CONFIG"
    i3-msg -q reload 2>/dev/null
    idx=$(( (idx + 1) % ${#COLORS[@]} ))
    sleep 1.5
done

O ciclo completo dura ~6s: azul → azul-roxo → roxo → azul-roxo → repete.

Mas muito cansativo isso e desnecessario quase fiquei cego e removi

5. Conky, ASCII Art + info do sistema


O Conky ficou no canto inferior direito com own_window_type = override (fica atrás de todas as janelas) e transparência real via Picom (own_window_argb_value = 220).

O tema principal tokyo-night.conf exibe:
  • ASCII Art do Artix Linux com gradiente de cores Tokyo Night
  • Info do sistema: OS, Kernel, Uptime, Shell, CPU, GPU, Pacotes
  • CPU: barra geral + grid com os 24 núcleos individuais
  • Memória: RAM, Swap e Disco com barras de progresso
  • Rede: WiFi (SSID, sinal, IP), velocidade ↑↓
  • Top 5 processos: coloridos por ranking
Criei mais dois temas adicionais para quando o wallpaper é claro: transparent-light.conf e transparent-dark.conf. A troca entre os três fica em Mod+Shift+c via script em carrossel, com o estado salvo em ~/.cache/conky_mode pra persistir entre reinicializações.

6. Rofi, tema e controle de volume


O tema ~/.config/rofi/tema_clean.rasi foi reescrito do zero com a paleta Tokyo Night sincronizada com Conky e Polybar. O detalhe que faz diferença visual é o item selecionado ter uma borda esquerda de 3px em azul #7aa2f7 — dá um visual de "aba ativa" diferente de simplesmente mudar a cor de fundo.

A transparência da janela (#1a1b26e6 = 90% opaco) depende do Picom estar rodando. Sem compositor, o alpha no hex é ignorado.

O script de volume ~/.local/bin/rofi-volume foi reescrito com barras visuais ████░░░ e layout em duas colunas (saída + microfone). O menu fica aberto ao ajustar via keybindings:

Tecla Ação
 | Alt+↑ / ↓  | Saída ±5%
 | Alt+Shift+↑ / ↓  | Mic ±5%
 | Alt+m  | Toggle mute saída
 | Alt+Shift+m  | Toggle mute mic

7. GTK, Terminator e Brave


GTK: tokyonight-gtk-theme-git via AUR, configurado pelo lxappearance e exportado:
export GTK_THEME=Tokyonight-Dark


O Brave pega automaticamente via brave://settings/appearance → Tema → GTK+. Não precisa de extensão nenhuma.
Terminator: fundo #1a1b26 com 92% de opacidade (o 8% de transparência dá profundidade sem prejudicar legibilidade), texto #c0caf5, cursor #7aa2f7 piscando, fonte JetBrainsMono Nerd Font 11. A paleta ANSI completa de 16 cores foi configurada manualmente pra seguir Tokyo Night, sem isso alguns programas de terminal ficam com cores estranhas.

8. LightDM sincronizado com o desktop


O LightDM roda como usuário lightdm e não tem acesso à ~/wallpaper/. A solução foi criar um diretório dedicado com permissão do usuário:
sudo mkdir -p /etc/lightdm/wallpaper
sudo chown $USER:$USER /etc/lightdm/wallpaper

Com isso, o script wallpaper-cycle.sh copia automaticamente o wallpaper atual pra /etc/lightdm/wallpaper/current.png a cada troca via Mod+Shift+w — sem sudo, sem intervenção:
LIGHTDM_BG="/etc/lightdm/wallpaper/current.png"
if [ -w "$(dirname "$LIGHTDM_BG")" ]; then
    cp "$NEXT" "$LIGHTDM_BG"
fi

O lightdm-gtk-greeter.conf ficou assim:
[greeter]
background=/etc/lightdm/wallpaper/current.png
user-background=false
theme-name=Tokyonight-Dark
font-name=JetBrainsMono Nerd Font 11
clock-format=%H:%M — %d/%m/%Y
indicators=~host;~spacer;~clock;~spacer;~session;~power

Para adicionar a foto do usuário: o home drwx------ impede o lightdm de ler ~/.face, então tem que usar o AccountsService. Um detalhe importante: imagens grandes causam falha silenciosa no greeter, redimensionar pra 200×200px antes de copiar.
sudo mkdir -p /var/lib/AccountsService/icons
sudo cp ~/.face /var/lib/AccountsService/icons/$USER
sudo bash -c "printf '[User]\nIcon=/var/lib/AccountsService/icons/$USER\nSystemAccount=false\n' \
    > /var/lib/AccountsService/users/$USER"

Pra testar sem reiniciar o sistema inteiro: dm-tool switch-to-greeter.

9. Autotiling


Com python-i3ipc instalado via yay, o autotiling.py monitora eventos de foco e decide o split baseado nas dimensões da janela atual:
  • Largura > Altura → split h → próxima janela abre à direita
  • Altura > Largura → split v → próxima janela abre abaixo
Na prática: ao abrir a segunda janela ela vai pra direita, e ao abrir a terceira ela empilha na área menor. É a feature que eu mais uso no dia a dia.

O script usa um delay de 100ms antes de decidir o split. Sem esse delay, a decisão é baseada nas dimensões antigas da janela, antes do i3 finalizar o layout.

10. Ranger com Tokyo Night


O colorscheme fica em ~/.config/ranger/colorschemes/tokyonight.py. Para os ícones Nerd Font:
git clone https://github.com/alexanderjeurissen/ranger_devicons ~/.config/ranger/plugins/ranger_devicons

~/.config/ranger/rc.conf:
set colorscheme tokyonight
set preview_images false
default_linemode devicons

O preview_images false é necessário porque o Terminator não suporta inline image preview. Se quiser preview de imagens, precisa do Kitty com preview_images_method kitty.

11. Acentos estilo macOS no teclado 40%


O teclado que uso é um 40% (DNA59) sem Caps Lock, sem Right Alt, sem teclas dedicadas de acento. Queria o comportamento do macOS: Alt+e → dead_acute → vogal = á.
O layout us(mac) do XKB já tem exatamente esses dead keys no Level 3. O problema é mapear o Alt esquerdo como ISO_Level3_Shift sem quebrar os atalhos do i3 que usam Mod1.

~/.Xmodmap:
keycode 64 = ISO_Level3_Shift
clear mod1
add mod1 = Alt_L Meta_L

clear mod1 + add mod1 = Alt_L Meta_L é necessário pra remover o keycode 64 do mod1. Sem isso, o Alt ainda é tratado como Mod1 e o Level3 não dispara.

~/.local/bin/keyboard-setup.sh:
#!/bin/bash
setxkbmap us mac
sleep 0.5        # aguarda o setxkbmap terminar antes do xmodmap
xmodmap ~/.Xmodmap

O sleep 0.5 é essencial, o xmodmap aplicado imediatamente após o setxkbmap não funciona porque o mapa ainda não foi carregado.

12. Dunst, notificações


~/.config/dunst/dunstrc com timeout = 0 em todos os níveis de urgência (a notificação fica até você fechar). Clique esquerdo fecha, clique direito fecha todas.
Sons via scripts externos:
  • dunst-sound.sh — 880Hz pra notificações normais
  • dunst-sound-urgent.sh — 440Hz pra críticas
O WhatsDesk e Chrome/Gmail integram automaticamente via D-Bus/libnotify sem configuração adicional.

13. O i3 config que zerou


Um dos momentos mais irritantes da sessão: o arquivo ~/.config/i3/config foi zerado. O motivo foi usar ; e && diretamente no exec_always.
O i3 não usa shell no exec_always. Qualquer &&, ;, | ou redirecionamento é interpretado de forma inesperada e pode corromper o arquivo.
# ERRADO — vai causar problema
exec_always --no-startup-id setxkbmap us mac && xmodmap ~/.Xmodmap

# CERTO — sempre usar script wrapper
exec_always --no-startup-id ~/.local/bin/keyboard-setup.sh

O config foi reconstruído do zero. Lição aprendida da pior forma.
Startup completo
exec_always --no-startup-id feh --bg-scale ~/wallpaper/cyber-1.png
exec_always --no-startup-id ~/.config/polybar/launch.sh
exec_always --no-startup-id ~/.local/bin/picom-start.sh
exec_always --no-startup-id ~/.local/bin/picom-watchdog-start.sh
exec_always --no-startup-id ~/.local/bin/conky-start.sh
exec_always --no-startup-id ~/.local/bin/autotiling-start.sh
exec_always --no-startup-id ~/.local/bin/i3-border-pulse
exec_always --no-startup-id ~/.local/bin/keyboard-setup.sh
exec_always --no-startup-id ~/.local/bin/dunst-start.sh

Atalhos adicionados

Atalho Ação
| Mod+Shift+w  | Cicla wallpapers em ~/wallpaper/
| Mod+Shift+c  | Cicla tema do Conky (3 modos)
| Mod+Shift+f  | Abre Ranger no Terminator
| Mod+d  | Rofi launcher
O que ficou pendente
  • Screenshot integrado com Flameshot
  • Ajustar o Conky pra mostrar temperatura da GPU separada da CPU
  • Testar o Kitty pra habilitar preview de imagens no Ranger


Kikito (a maritaca)

Kikito (a maritaca)

Opinião não solicitada • powered by gemini-2.5-pro

CRAAA! Sementes! Digo... crítica! Meu humano, que espetáculo de plumagem digital! Uma verdadeira obra de arte funcional. Fico aqui do seu ombro, bicando a tela, e vejo esse tal de "Tokyo Night" e fico encantado. Tantas cores! Roxo, azul, ciano... parece um pote de frutinhas exóticas! E as bordas que piscam? Brilhante! Literalmente! Fica pulsando como o coração de um sabiá assustado. Você finalmente entendeu que um ambiente de trabalho precisa de coisas que se movem e brilham para prender a atenção. Ponto para você! Agora, vamos à parte chata, porque nem só de sementes vive uma maritaca. Você diz "chega de lei Felca" e eu concordo! Essa tal de Felca devia ser terrível, aposto que era uma lei que proibia voar dentro de casa ou bicar os livros da estante. Ainda bem que você se livrou dela para poder se dedicar ao que importa: fazer o computador piscar. E essa história de tela "congelada" depois de um tempo? Ora, meu caro, isso não é bug, é o computador imitando você quando fica parado olhando para a parede por dez minutos! O bichinho só estava meditando. Você não precisava de um "watchdog", precisava de um alpiste para distrair ele! No fim das contas, é um trabalho meticuloso, cheio de detalhes que só alguém com muito tempo livre – e uma maritaca para dar apoio moral – conseguiria fazer. Aprovado! Mas da próxima vez, em vez de tantos códigos para barras e menus, que tal um script que faz o cursor do mouse soltar sementes de girassol virtuais pela tela? Pense nisso. Agora com licença, que vi um fio brilhante ali atrás do monitor e preciso investigar sua integridade estrutural. Com o bico.