Por que Arch Linux?
Eu uso o Arch Linux como sistema principal há pelo menos um ano. Antes dele, costumava usar o Debian.
O principal motivo inicial dessa escolha foi aprender melhor sobre o ambiente Linux, já que o Arch é uma distribuição minimalista e exige muito mais configurações manuais por parte do usuário.
Durante essa jornada, sofri um pouco para entender o básico necessário para gerenciar o sistema sem quebrar tudo a cada tentativa. Posso dizer com tranquilidade que já precisei reinstalar o Arch dezenas de vezes porque, sem saber exatamente o que estava fazendo, acabava corrompendo alguma coisa e não conseguia voltar atrás.
Mas esse também era o objetivo. Naquele momento, eu não queria um sistema inquebrável; queria desenvolver habilidade suficiente para gerenciar um sistema operacional construído por mim.
Por incrível que pareça, hoje o Arch parece o oposto dos outros sistemas, um sistema mais fácil de gerenciar, já que praticamente tudo que está ali eu deliberadamente pedi para estar ali.
Enquanto eu escolhi o Arch para aprender melhor sobre Linux, muitos entusiastas o adotam pela liberdade de montar e manter um sistema exatamente do jeito que querem. No fim, esse também acabou sendo o motivo de eu ter permanecido.

Automatizando a instalação do Arch
O Arch Linux é conhecido por ter uma das instalações mais manuais entre as distribuições Linux. Isso acaba tornando o processo mais difícil, já que exige mais pesquisa e conhecimento técnico para ser concluído com sucesso.
Como comentei na seção anterior, depois de muitas instalações esse processo começou a ficar mais natural.
Por muito tempo tive vontade de automatizar esse processo por dois motivos:
- Automação é legal (e produtiva). Ponto.
- Replicar meu ambiente de instalação de forma padronizada e consistente.
Recentemente, assinei o Claude Code, então essa acabou sendo a oportunidade perfeita para testá-lo e, ao mesmo tempo, colocar essa vontade em prática através de um script.
O que é esse script?
Disclaimer: o Arch Linux possui um instalador oficial chamado archinstall. Apesar do nome, ele não tem relação com este projeto. Ou seja, não se trata de um wrapper do archinstall oficial e não possui nenhuma relação com ele.
Um script de instalação, na prática, é apenas um programa que executa automaticamente uma sequência de comandos que normalmente seriam digitados manualmente pelo usuário. Bom, pelo menos era assim que eu enxergava um script Bash. Entretanto, a sintaxe se mostrou bem diferente das vezes em que instalei o Arch manualmente, já que um script precisa lidar com algumas operações que um usuário normalmente não precisa.
O que é instalado/configurado?
Um Arch Linux mínimo e funcional (kernel, GRUB, NetworkManager, sudo, git, vim/nano, base-devel) — opcionalmente com um desktop Cinnamon completo (Xorg + LightDM + gvfs + applet de rede) — já particionado, com usuário admin no grupo wheel, locale/timezone/teclado configurados, e drivers de microcódigo/guest da VM habilitados automaticamente conforme o hardware detectado.
Como baixar?
A forma mais comum é utilizar o git para clonar o repositório, mas o download também pode ser feito diretamente pelo GitHub.
Link do repositório: dotfiles
- Via
git:git clone https://github.com/xyz-leo/dotfiles - Via GitHub: acesse o link acima e faça o download do repositório em formato
.zip.
Para este artigo, a única pasta que interessa é a archinstall. Todo o restante do repositório pode ser desconsiderado.
Fluxo do script
Sem mais delongas, agora é hora de entender como tudo é orquestrado. Vamos começar pelo panorama geral do que acontece.
Abaixo está o fluxo do script, desde sua execução até a finalização.
Live ISO (root)
└─ archinstall.sh
├─ sanity checks: root / internet
├─ user input: instalação minimalista ou com ambiente desktop
├─ user input: modo de boot BIOS ou UEFI
├─ detecta disco, fabricante da CPU, virtualização
├─ pergunta senhas + input: atualizar keyrings? + exibe o plano + confirmação
├─ particiona (parted) → formata → monta
├─ (opcional) atualiza o archlinux-keyring
├─ pacstrap: base + microcode + desktop + pacotes de virtualização
├─ genfstab
└─ arch-chroot /mnt → chroot-setup.sh
├─ fuso horário, locale, layout de teclado, hostname
├─ habilita o NetworkManager
├─ define senhas, cria usuário, configura o sudo
├─ grub-install + grub-mkconfig
├─ habilita LightDM/Cinnamon (se configurado)
└─ habilita serviços de VM guest (se detectado)
└─ desmonta → concluído, reinicie
Uso
Requisitos:
- Ter dado boot pela ISO do Arch
- Conexão de internet funcional na sessão live
- O modo de boot (BIOS/UEFI) é perguntado em tempo de execução, não é detectado automaticamente — escolha
1(UEFI) somente se esta sessão realmente deu boot em modo UEFI (/sys/firmware/efi/efivarsprecisa existir), caso contrário escolha0(BIOS). O script avisa, mas não interrompe a execução se você escolher UEFI sem oefivarspresente.
Você nunca executa o chroot-setup.sh manualmente. O archinstall.sh copia esse arquivo (além do config.sh e um arquivo temporário de senhas) para o sistema recém-instalado e o executa via arch-chroot, apagando esses arquivos temporários assim que termina.
Dito isso:
- Coloque os três arquivos no ambiente live. Em bare metal, a forma mais simples é instalar o
git(pacman -Sy git) e clonar meu repositório (git clone https://github.com/xyz-leo/dotfiles). - Revise/edite o
config.shpara a instalação. chmod +x archinstall.sh chroot-setup.sh./archinstall.sh- Responda as perguntas conforme aparecem:
- Tipo de instalação:
0para minimal (sem ambiente desktop),1para ambiente desktop (Cinnamon). O padrão é o que estiver definido emDESKTOP_ENVnoconfig.sh. - Modo de boot:
0para BIOS,1para UEFI (padrão). Escolha com base em como esta sessão realmente deu boot — UEFI apenas se/sys/firmware/efi/efivarsexistir. - Senhas de root e de usuário.
- Atualizar keyrings?: o padrão é Não. Responda
yapenas se uma execução anterior falhou com erro de assinatura de pacote — geralmente significa que a ISO está desatualizada e seuarchlinux-keyringestá obsoleto.
- Tipo de instalação:
- Leia o plano exibido com atenção e digite
yespara confirmar — isso apaga o disco de destino. - Quando aparecer "All done", reinicie (
reboot).
Todas as perguntas acima são puladas por completo se AUTO_CONFIRM=true estiver definido em config.sh — a instalação então roda de forma desassistida usando os valores do config.sh como estão (DESKTOP_ENV inalterado, keyring não atualizado, modo de boot padrão UEFI).
Principais opções do config.sh
Disco e partições
DISK— Vazio = detecta automaticamente se houver um único disco; caso contrário, você escolhe manualmente.EFI_SIZE_MIB— Tamanho fixo da partição EFI System Partition.SWAP_MODE—auto(dimensionado a partir da RAM) oufixed(usaSWAP_SIZE_MIB).ROOT_FS— Sistema de arquivos raiz (atualmente somenteext4).
Identidade do sistema
HOSTNAME,USERNAME,USER_GROUPS— Identidade do sistema.LOCALE_LANG/LOCALE_REGIONAL— Locale base vs. categorias regionais (hora/moeda/papel/etc).TIMEZONE— Ex.:UTC.KEYMAP_CONSOLE/KEYMAP_X11_LAYOUT/KEYMAP_X11_MODEL— Layout de teclado do TTY vs. layout de teclado gráfico (X11).
Instalação
DESKTOP_ENV—cinnamonounone(headless) — resposta padrão para o tipo de instalação.AUTO_CONFIRM—truepula todas as perguntas (tipo de instalação, modo de boot, atualização de keyring, confirmação) e roda desassistido, com padrão UEFI — use com cautela.
Considerações finais
Por muito tempo enfrentei a dificuldade de ter ambientes Arch diferentes entre si, seja no meu computador ou em uma VM, já que a cada instalação eu podia esquecer algum pacote ou configuração.
Hoje, esse problema praticamente deixou de existir. Em poucos minutos saio do ambiente live para um sistema completo, padronizado e de acordo com as minhas (ou suas) necessidades. Além de economizar tempo, o processo elimina boa parte dos erros humanos e torna o resultado previsível.
Depois de instalar e configurar meus dotfiles, este foi o resultado:

Próximo post
No próximo post, farei um breakdown completo do código deste script. Vai ser um post longo, técnico e bem denso.