For those who have contemplated installing the reputedly “dreaded” Arch Linux but have been discouraged by its perceived difficulty, the present guide offers a practical, step-by-step path from a blank drive to a clean, bootable system.
Reading the entire document before executing commands is strongly encouraged.
WARNING: The information herein should be verified whenever possible, as certain steps may evolve over time. Every effort will be made to keep the guide current.
Linux stores the hardware clock in UTC, whereas Windows records local time. To avoid clock drift, on Windows:
RealTimeIsUniversal as a DWORD of $32$ bits with value $1$ under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation.Configuring OpenSSH in the live environment permits the entire installation to be driven from another computer via a secure shell.
systemctl status sshd.
If the process is not running, run it with
systemctl start sshd.
passwd: set the root’s password.
ip addr show: identify the installer’s IP address.
Run ssh root@<installer IP> from the other device.
Setting a larger console font with setfont ter-132n improves readability on Full-HD displays; select a smaller size on lower-resolution panels.
Presence of entries in /sys/firmware/efi/efivars/ confirms a UEFI boot.
List available layouts: localectl list-keymaps.
Filter with grep, e.g. localectl list-keymaps | grep la-latin1.
Load the layout: loadkeys <layout>.
ip addr show lists active interfaces.
iwd)Launch the “iwd” shell: iwctl.
Confirm the adapter appears with device list; troubleshoot via the Arch Wiki if absent.
Scan and enumerate networks.
station <device> scan
station <device> get-networks
station <device> connect "<SSID>"
Alternatively, using
iwctl:iwctl --passphrase <passphrase> station <device> connect <SSID>
A wired connection simplifies installation.
| partition | suggested size | filesystem | purpose |
|---|---|---|---|
/efi |
500 MiB | FAT32 | holds bootloaders and NVRAM entries for UEFI firmware. |
root |
$\geq 40 \text{GiB}$ | ext4 | operating system files. |
/home |
remaining space | ext4 (optional) | user data. |
fdiskfdisk -l: list all disk.
fdisk /dev/<device>.
g: initialize a GPT table.
Create the EFI.
n # New partition
1 # Partition number
<ENTER> # Accept default first sector
+500M
t 1 # Change type
Create the /.
n
2
# Accept default first sector
+50G # Or preferred size
Create /home.
n
3
# Accept defaults to use remaining space
No special type change is required; the default Linux filesystem code is correct.
w: write changes and quit.
mkfs.fat -F32 /dev/<EFI>.
mkfs.ext4 /dev/<root.
mkfs.ext4 /dev/<home>.
mount /dev/<root> /mnt.
mkdir -p /mnt/boot/EFI.
mount /dev/<EFI> /mnt/boot/EFI.
mkdir /mnt/home.
mount /dev/<home> /mnt/home.
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak.
reflector --verbose --latest 10 --protocol https --sort rate --save /etc/pacman.d/mirrorlist.
genfstab -U /mnt >> /mnt/etc/fstab
When a separate NTFS disk is used for general data storage, it can be incorporated as follows:
mkdir /mnt/files.
pacman -S ntfs-3g.
mount /dev/<disk partition> /mnt/files.
After mounting, the filesystem table must be regenerated.
The following entry illustrates a typical NTFS partition configuration in /etc/fstab:
UUID=64A6257CA625503A /home/braz/files ntfs-3g auto,exec,users,uid=1000,gid=1000,noatime 0 2
pacstrap -i /mnt base base-devel linux linux-headers linux-firmware git sudo networkmanager.
arch-chroot /mnt.
Enable networkmanager: systemctl enable NetworkManager.
Uncomment en_US.UTF-8 in /etc/locale.gen, then run locale-gen.
Create /etc/locale.conf containing LANG=en_US.UTF-8.
Add KEYMAP=us in /etc/vconsole.conf.
passwd: set the root password.
useradd -m -g users -G wheel <username>.
In certain administrative scenarios, an account may be created without assignment to any supplementary groups (
useradd -m <username>); however, separate configuration within/etc/sudoers.dis required to grant the necessary privileges.
passwd <username>.
EDITOR=nvim visudo and uncomment “%wheel ALL=(ALL) ALL”.
When only the user account has been created, the required privileges must be granted by adding
<username> ALL=(ALL) ALLtosudoers.d.
pacman -S grub efibootmgr.
When the installation is performed alongside Windows, the package
os-proberis installed as well.
The file /etc/default/grub is opened, and the line with “GRUB_DISABLE_OS_PROBER” is uncommented.
If the installation is not performed alongside Windows, this step may be omitted.
grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck.
grub-mkconfig -o /boot/grub/grub.cfg.
After completing these steps, the chroot environment is exited, all filesystems are unmounted (umount -a or umount -lR /mnt), and the system is rebooted with reboot.
The installation medium should be removed before the system restarts.
timedatectl list-timezones: list available time-zone identifiers.> A specific entry may be located with grep, for example: `timedatectl list-timezones | grep Bogota`.
timedatectl set-timezone <time zone>: the desired time zone is applied (e.g., America/Bogota).
timedatectl set-ntp true.
hostnamectl set-hostname <hostname>.
pacman -S amd-ucode for AMD processors or intel-ucode for Intel processors.
For the GPU drivers use pacman -S nvidia nvidia-utils nvidia-settings for Nvidia, mesa libva-mesa-driver for AMD or Intel of GMA 4500 up to Coffee Lake architectures, intel-media-driver for Intel of Broadwell and newer architectures.
pacman -S virtualbox-guest-utilsfor VirtualBox.
pacman -S wireplumber pipewire pipewire-pulse pipewire-alsa pipewire-jack
git clone https://aur.archlinux.org/yay-bin.git.
cd yay-bin.
makepkg -si.
pacman -S ly && systemctl enable ly.service.
The config file is
/etc/ly.
A minimal Arch installation has now been completed. The subsequent task involves selecting either a desktop environment or a window manager. Installing any desktop environment should present no difficulties, because the corresponding packages include all components required for a complete user experience.