Minha vida é uma bosta, mas meu rice está bonitão
Nada a ver com o assunto principal do blog, mas eu estava para formatar meu computador, como gosto de fazer de tempos em tempos, quando me veio a ideia de que eu deveria "arroizar" meu ambiente desta vez.
Nunca me preocupei com ricing, eu apenas instalava o dwm com um ou dois patches, não usava nem cores, e deixava de qualquer jeito. Na imagem, o setup que eu usei durante este ano:
Eu não ligava muito para costumização de ambiente, apenas instalava, deixava literalmente duas cores no dwm (branco e preto) e usava aquela merda feiosa com terminais pretos de cansar os olhos. O wallpaper é novidade, a maior parte do ano eu usava um fundo preto. Feio pra caralho e muito básico, pois dwm por si só não traz quase nada e eu não tinha muitos patches.
Toda vez que eu instalava um sistema novo eu apenas copiava os dotfiles e instalava essa merda horrível e sem graça porque eu tinha preguiça de deixar meu ricing bonitão. Mas desta vez foi diferente, agora eu resolvi que iria fazer um ricing LINDO e EFICIENTE, com todos os patches que eu precisava.
Regras para o meu novo rice
Antes de fazer qualquer coisa, eu decidi primeiro o que eu precisava. As regras eram:
- O ricing seria completamente a nível de usuário, de forma que eu possa instalar independentemente para vários usuários no meu sistema e ter ambientes completamente diferentes para cada usuário.
- Tudo ficaria reúnido em um diretório, de forma organizada.
- Tem que ser extremamente fácil de instalar.
Por quê?
Uma das razões é que eu gosto de ter vários usuários no meu computador pessoal. Um para ficar procrastinando na internet, um para estudos, outro para criptoputarias... tenho até um usuário SDF só para este blog. Se eu instalar, digamos, o dwm a nível de sistema com sudo make install, o config.def.h é aplicado para todo o sistema e eu não quero isso. Quero um ambiente diferente para cada usuário.
A razão para a segunda regra é por questão de organização e portabilidade. Com tudo em um único diretório eu posso transferir meu ricing facilmente entre sistemas, e, como veremos adiante, eu encontrei um forma muito eficiente de fazer isso usando hardlinks.
Por fim, eu queria que fosse fácil de instalar mesmo quando eu não pudesse transferir meu diretório $RICE. Por exemplo, eu gosto de brincar com VMs e queria instalar meu ambiente nelas automaticamente, com um comando. Por isso fiz um script de instalação.
Softwares da suckless e seus patches
Eu usei o dwm, dmenu, st, slstatus e slock, com os patches:
- dwm-fullgaps
Adiciona lacunas entre as janelas. - dwm-status2d
Permite cores na barra de status. - dwm-pertag
Faz com que a configuração de cada tag seja independente. - dwm-movestack
Permite mover uma janela no stack. - dwm-bottomstack
Adciona dois novos layouts. - dwm-clientopacity
Adiciona opacidade nas janelas focadas e não focadas. - dmenu-center
Centraliza o dmenu. - st-alpha
Adiciona opacidade ao st. - st-dracula
Esquema de cores para o st. - st-scrollback
Permite scrollar no st. - st-scrollback-mouse
O mesmo, mas com o mouse. - slock-message
Mensagem personalizada na tela de bloqueio.
Não vou explicar cada um para não escrever demais, você pode olhar no site da suckless, mas esses patches deixam tudo muito melhor. Só faltou um cfacts que eu ESQUECI e só lembrei AGORA enquanto escrevo isso, mas foda-se. Vai ficar sem cfacts.
Fora os softwares da suckless, também instalei um sistema de notificações com dunst e notify-send, e uso o xbindkeys para keybindings e o crontab (existe outro?) para automação.
Minha convenção para o diretório $RICE
Criei uma convenção para manter tudo organizado:
Estrutura do diretório .rice: .rice | api scripts que criam ou manipulam arquivos *.dat em $RICE/var | bin binários e scripts executáveis | doc documentação | env arquivos *.env "sourceáveis" | etc hardlinks para arquivos de configuração | log logs gerados por scripts do rice | src código fonte de alguns binários | var arquivos *.dat usados por scripts do ambiente | wal wallpapers
Vou explicar: $RICE/src é onde ficam os softwares suckless. Eles são compilados com make, nunca sudo make install, e o binário resultante fica lá também.
Em $RICE/bin ficam softlinks para esses binários. O $RICE/bin vai estar presente no $PATH. Lá também vivem outros scripts usados pelo ambiente, como o script que gera a barra de status, ou o script que instala os config files de $RICE/etc no sistema.
Por falar em $RICE/etc, lá ficam hardlinks para config files que podem estar em qualquer lugar do sistema. Por exemplo, a configuração do vim está em ~/.vimrc, e $RICE/etc/vim/vimrc é um hardlink para ela. Assim você mantém todos os config files do sistema em um só diretório por praticidade e também para facilmente portar para outro sistema ou para outro usuário no sistema.
Os arquivos em $RICE/env são "sourceados" pelo ~/.bashrc. Lá ficam variáveis de ambiente, o prompt, aliases, etc.
O diretório $RICE/api e $RICE/var são irmãos. Em $RICE/api ficam scripts menores que são chamados pelo cron ou pelo xbindkeys. Por exemplo, um cronjob a cada 5 minutos executa um script de "curlar" o preço do bitcoin, ou a temperatura atual, etc. Este script deve ficar em $RICE/api. E onde ele vai guardar essa informação? Em $RICE/var. Lá ficam arquivos *.dat variáveis, gerados pelos scripts em $RICE/api. Alguns também podem escrever em $RICE/log, que é onde ficam os logs gerados pelo ambiente. Lá se pode guardar coisas como logs de erro ou logs gerados por scripts em $RICE/api, como um histórico do uso da CPU ou algo assim.
Em $RICE/doc fica uma pequena explicação desta estrutura e é um espaço para escrever algo sobre o ambiente, como TODOs, etc. Por fim, $RICE/wal guarda wallpapers.
Como ficou meu ricing?
Meu ricing recém instalado ficou assim:
Simplesmente lindo e não cansa os olhos. Eu não sei por que eu nunca fiz isso antes.
É uma instalação bem básica, só está presente coisas que eu sei que sempre irei usar em qualquer sistema.
O resto eu configuro independentemente para cada usuário.
Script de instalação
Já que eu vou instalar essa coisa em VMs quero que seja muito fácil de instalar e por isso escrevi um script de instalação.
Vou deixar documentado aqui para eu não esquecer e para quem quiser testar meu rice. Abaixo, como instalar meu ricing lindão.
Preparando o ambiente
Esta coisa foi feita para funcionar em um Debian 12 recém instalado sem nenhum DE. Não testei isso em nenhum outro contexto.
Dependências:
Para instalar as dependências rode do tty de um Debian 12 recém instalado:
$ sudo apt install make gcc patch libxrandr-dev libx11-dev libxft-dev libxinerama-dev xorg dunst libnotify-bin xbindkeys feh fonts-font-awesome fonts-noto-color-emoji pulseaudio picom
Instalando meu ricing
Baixe e rode o script de instalação:
$ wget https://raw.githubusercontent.com/saindodafalha/sdf-autorice/refs/heads/master/autorice.sh
$ chmod u+x autorice.sh
$ ./autorice.sh
Ao final, rode:
Pronto, está instalado. Simple assim. A parte mais demorada é a instalação das dependências, já o ricing leva menos de dois minutos.
Observações importantes
Pulseaudio
Por padrão, o Debian sem DE vem com o áudio mutado. O script de instalação tenta arrumar o áudio automaticamente, mudando pra 50% e tirando do mudo.
Porém, nem sempre funciona e, quando não funciona, você pode simplesmente fazer isso manualmente, o que não é difícil.
Em $RICE/env/globals.env existe a variável de ambiente MY_PACTL_SINK com o valor 0. É o sink do pulseaudio que acredito que o padrão seja 0. Caso o seu sink seja outro, por exemplo, 1, você precisará mudar essa variável e relogar para os keybindings de volume funcionarem.
Virtualbox
Às vezes o Virtualbox não reconhece direito minhas teclas de função. Quando digito SUPER + F2, ao invés de sair MOD4 + F2, sai MOD4 + SuperL. Meus bindings de volume usam as teclas de função e por isso não funcionam no Virtualbox. Acho que isso é coisa do meu teclado vagabundo, mas se acontecer com você é só mudar os bindings para outras teclas.
Emojis no dwm/dmenu
Se você quiser emojis funcionando na barra do dwm, veja: EMOJIS no DWM/DWMBLOCKS/DMENU/ST sem o LIBXFT-BGRA
Slock
Para o slock funcionar com usuários que não são o root, faça isso:
$ cd $RICE/src/slock-1.5/
$ sudo chown root:root ./slock
$ sudo chmod u+s ./slock
Conclusão
Eu achava que isso de ficar customizando a distro era frescura, mas realmente faz uma enorme diferença. Eu espero não precisar fazer isso nunca mais, porque é chato e toma tempo.
No final valeu a pena. Ficou muito melhor e não precisarei fazer isso nunca mais porque é só rodar um script.
E eu nunca sei se o termo certo em "português" seria "rice" ou "ricing". Aliás, por que o nome disso sequer é rice?
Última atualização: 10/01/2025 17:03
Bloco 875198 (17/12/2024)
Numa tardinha ensolarada e quente de terça-feira.
Quando 1₿ valia $106229 e a taxa de rede custava 8sat/vB.