Arch Linux Installation from Scratch | Comprehensive guide on installing Arch Linux
<h2 id=prepare-installation-media>1. Prepare Installation Media</h2><ol type=1><li>Download the latest Arch Linux ISO: <a href=https://archlinux.org/download/ >https://archlinux.org/download/</a><li>Create a bootable USB (macOS/Linux example using <code>dd</code>):</ol><div class=sourceCode id=cb1><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb1-1><a href=#cb1-1 aria-hidden=true tabindex=-1></a><span class=fu>sudo</span> dd if=archlinux-YYYY.MM.DD-x86_64.iso of=/dev/sdX bs=4M status=progress oflag=sync</span></code></pre></div><ol type=1 start=3><li>Boot your system from the USB and select <strong>UEFI mode</strong>.</ol><hr><h2 id=verify-boot-and-network>2. Verify Boot and Network</h2><ol type=1><li>Verify UEFI boot:</ol><div class=sourceCode id=cb2><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb2-1><a href=#cb2-1 aria-hidden=true tabindex=-1></a><span class=fu>ls</span> /sys/firmware/efi/efivars</span></code></pre></div><ol type=1 start=2><li>Verify internet connection:</ol><div class=sourceCode id=cb3><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb3-1><a href=#cb3-1 aria-hidden=true tabindex=-1></a><span class=fu>ping</span> <span class=at>-c</span> 3 archlinux.org</span></code></pre></div><ol type=1 start=3><li>Connect to Wi-Fi using <code>iwctl</code>:</ol><div class=sourceCode id=cb4><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb4-1><a href=#cb4-1 aria-hidden=true tabindex=-1></a><span class=ex>iwctl</span></span>
<span id=cb4-2><a href=#cb4-2 aria-hidden=true tabindex=-1></a><span class=ex>device</span> list</span>
<span id=cb4-3><a href=#cb4-3 aria-hidden=true tabindex=-1></a><span class=ex>station</span> <span class=op><</span>device<span class=op>></span> scan</span>
<span id=cb4-4><a href=#cb4-4 aria-hidden=true tabindex=-1></a><span class=ex>station</span> <span class=op><</span>device<span class=op>></span> get-networks</span>
<span id=cb4-5><a href=#cb4-5 aria-hidden=true tabindex=-1></a><span class=ex>station</span> <span class=op><</span>device<span class=op>></span> connect <span class=op><</span>SSID<span class=op>></span></span>
<span id=cb4-6><a href=#cb4-6 aria-hidden=true tabindex=-1></a><span class=bu>exit</span></span></code></pre></div><hr><h2 id=update-system-clock>3. Update System Clock</h2><div class=sourceCode id=cb5><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb5-1><a href=#cb5-1 aria-hidden=true tabindex=-1></a><span class=ex>timedatectl</span> set-ntp true</span></code></pre></div><hr><h2 id=partition-the-disk>4. Partition the Disk</h2><p>List disks:<div class=sourceCode id=cb6><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb6-1><a href=#cb6-1 aria-hidden=true tabindex=-1></a><span class=ex>lsblk</span></span></code></pre></div><p>Partition with <code>cfdisk</code>:<div class=sourceCode id=cb7><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb7-1><a href=#cb7-1 aria-hidden=true tabindex=-1></a><span class=ex>cfdisk</span> /dev/sda</span></code></pre></div><p>Example partition scheme:<table><thead><tr><th>Partition<th>Size<th>Type<th>Format<tbody><tr><td>/dev/sda1<td>512 MB<td>EFI<td>FAT32<tr><td>/dev/sda2<td>20–50 GB<td>Root<td>ext4<tr><td>/dev/sda3<td>Remaining<td>Home<td>ext4<tr><td>/dev/sda4<td>Swap<td>Swap<td>swap</table><p>Format partitions:<div class=sourceCode id=cb8><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb8-1><a href=#cb8-1 aria-hidden=true tabindex=-1></a><span class=ex>mkfs.fat</span> <span class=at>-F32</span> /dev/sda1</span>
<span id=cb8-2><a href=#cb8-2 aria-hidden=true tabindex=-1></a><span class=ex>mkfs.ext4</span> /dev/sda2</span>
<span id=cb8-3><a href=#cb8-3 aria-hidden=true tabindex=-1></a><span class=ex>mkfs.ext4</span> /dev/sda3</span>
<span id=cb8-4><a href=#cb8-4 aria-hidden=true tabindex=-1></a><span class=ex>mkswap</span> /dev/sda4</span>
<span id=cb8-5><a href=#cb8-5 aria-hidden=true tabindex=-1></a><span class=ex>swapon</span> /dev/sda4</span></code></pre></div><p>Mount partitions:<div class=sourceCode id=cb9><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb9-1><a href=#cb9-1 aria-hidden=true tabindex=-1></a><span class=fu>mount</span> /dev/sda2 /mnt</span>
<span id=cb9-2><a href=#cb9-2 aria-hidden=true tabindex=-1></a><span class=fu>mkdir</span> /mnt/boot</span>
<span id=cb9-3><a href=#cb9-3 aria-hidden=true tabindex=-1></a><span class=fu>mount</span> /dev/sda1 /mnt/boot</span>
<span id=cb9-4><a href=#cb9-4 aria-hidden=true tabindex=-1></a><span class=fu>mkdir</span> /mnt/home</span>
<span id=cb9-5><a href=#cb9-5 aria-hidden=true tabindex=-1></a><span class=fu>mount</span> /dev/sda3 /mnt/home</span></code></pre></div><hr><h2 id=install-base-system>5. Install Base System</h2><div class=sourceCode id=cb10><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb10-1><a href=#cb10-1 aria-hidden=true tabindex=-1></a><span class=ex>pacstrap</span> /mnt base linux-lts linux-firmware base-devel vim sudo git neofetch e2fsprogs iwd openssh man-db man-pages texinfo</span></code></pre></div><p>Generate filesystem table:<div class=sourceCode id=cb11><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb11-1><a href=#cb11-1 aria-hidden=true tabindex=-1></a><span class=ex>genfstab</span> <span class=at>-U</span> /mnt <span class=op>>></span> /mnt/etc/fstab</span></code></pre></div><hr><h2 id=chroot-into-installed-system>6. Chroot into Installed System</h2><div class=sourceCode id=cb12><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb12-1><a href=#cb12-1 aria-hidden=true tabindex=-1></a><span class=ex>arch-chroot</span> /mnt</span></code></pre></div><hr><h2 id=timezone-clock>7. Timezone & Clock</h2><div class=sourceCode id=cb13><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb13-1><a href=#cb13-1 aria-hidden=true tabindex=-1></a><span class=fu>ln</span> <span class=at>-sf</span> /usr/share/zoneinfo/Region/City /etc/localtime</span>
<span id=cb13-2><a href=#cb13-2 aria-hidden=true tabindex=-1></a><span class=ex>hwclock</span> <span class=at>--systohc</span></span></code></pre></div><hr><h2 id=localization>8. Localization</h2><p>Edit <code>/etc/locale.gen</code> and uncomment:<pre class=text><code>en_US.UTF-8 UTF-8</code></pre><p>Generate locales:<div class=sourceCode id=cb15><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb15-1><a href=#cb15-1 aria-hidden=true tabindex=-1></a><span class=ex>locale-gen</span></span>
<span id=cb15-2><a href=#cb15-2 aria-hidden=true tabindex=-1></a><span class=bu>echo</span> <span class=st>"LANG=en_US.UTF-8"</span> <span class=op>></span> /etc/locale.conf</span></code></pre></div><p>Set keyboard layout:<div class=sourceCode id=cb16><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb16-1><a href=#cb16-1 aria-hidden=true tabindex=-1></a><span class=bu>echo</span> <span class=st>"KEYMAP=us"</span> <span class=op>></span> /etc/vconsole.conf</span></code></pre></div><hr><h2 id=hostname-networking>9. Hostname & Networking</h2><div class=sourceCode id=cb17><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb17-1><a href=#cb17-1 aria-hidden=true tabindex=-1></a><span class=bu>echo</span> <span class=st>"myhostname"</span> <span class=op>></span> /etc/hostname</span></code></pre></div><p>Add hosts entries:<div class=sourceCode id=cb18><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb18-1><a href=#cb18-1 aria-hidden=true tabindex=-1></a><span class=fu>cat</span> <span class=op>>></span> /etc/hosts <span class=op><<EOF</span></span>
<span id=cb18-2><a href=#cb18-2 aria-hidden=true tabindex=-1></a><span class=st>127.0.0.1 localhost</span></span>
<span id=cb18-3><a href=#cb18-3 aria-hidden=true tabindex=-1></a><span class=st>::1 localhost</span></span>
<span id=cb18-4><a href=#cb18-4 aria-hidden=true tabindex=-1></a><span class=st>127.0.1.1 myhostname.localdomain myhostname</span></span>
<span id=cb18-5><a href=#cb18-5 aria-hidden=true tabindex=-1></a><span class=op>EOF</span></span></code></pre></div><p>Enable networking services:<div class=sourceCode id=cb19><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb19-1><a href=#cb19-1 aria-hidden=true tabindex=-1></a><span class=ex>systemctl</span> enable iwd</span>
<span id=cb19-2><a href=#cb19-2 aria-hidden=true tabindex=-1></a><span class=ex>systemctl</span> enable sshd</span>
<span id=cb19-3><a href=#cb19-3 aria-hidden=true tabindex=-1></a><span class=ex>systemctl</span> enable systemd-resolved</span></code></pre></div><hr><h2 id=set-root-password>10. Set Root Password</h2><div class=sourceCode id=cb20><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb20-1><a href=#cb20-1 aria-hidden=true tabindex=-1></a><span class=fu>passwd</span></span></code></pre></div><hr><h2 id=install-grub-bootloader>11. Install GRUB Bootloader</h2><div class=sourceCode id=cb21><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb21-1><a href=#cb21-1 aria-hidden=true tabindex=-1></a><span class=ex>pacman</span> <span class=at>-S</span> grub efibootmgr</span>
<span id=cb21-2><a href=#cb21-2 aria-hidden=true tabindex=-1></a><span class=ex>grub-install</span> <span class=at>--target</span><span class=op>=</span>x86_64-efi <span class=at>--efi-directory</span><span class=op>=</span>/boot <span class=at>--bootloader-id</span><span class=op>=</span>GRUB</span>
<span id=cb21-3><a href=#cb21-3 aria-hidden=true tabindex=-1></a><span class=ex>grub-mkconfig</span> <span class=at>-o</span> /boot/grub/grub.cfg</span></code></pre></div><hr><h2 id=create-a-user>12. Create a User</h2><div class=sourceCode id=cb22><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb22-1><a href=#cb22-1 aria-hidden=true tabindex=-1></a><span class=ex>useradd</span> <span class=at>-m</span> <span class=at>-G</span> wheel <span class=at>-s</span> /usr/bin/zsh nana</span>
<span id=cb22-2><a href=#cb22-2 aria-hidden=true tabindex=-1></a><span class=fu>passwd</span> nana</span></code></pre></div><p>Edit sudoers:<div class=sourceCode id=cb23><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb23-1><a href=#cb23-1 aria-hidden=true tabindex=-1></a><span class=ex>visudo</span></span>
<span id=cb23-2><a href=#cb23-2 aria-hidden=true tabindex=-1></a><span class=co># Uncomment: %wheel ALL=(ALL) ALL</span></span></code></pre></div><hr><h2 id=reboot>13. Reboot</h2><p>Exit chroot, unmount, and reboot:<div class=sourceCode id=cb24><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb24-1><a href=#cb24-1 aria-hidden=true tabindex=-1></a><span class=bu>exit</span></span>
<span id=cb24-2><a href=#cb24-2 aria-hidden=true tabindex=-1></a><span class=fu>umount</span> <span class=at>-R</span> /mnt</span>
<span id=cb24-3><a href=#cb24-3 aria-hidden=true tabindex=-1></a><span class=ex>reboot</span></span></code></pre></div><p>Remove the USB and boot into your fresh Arch Linux installation.<hr><h2 id=post-installation-setup>14. Post-Installation Setup</h2><ol type=1><li>Log in as your user.<li>Install Paru (AUR helper):</ol><div class=sourceCode id=cb25><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb25-1><a href=#cb25-1 aria-hidden=true tabindex=-1></a><span class=fu>git</span> clone https://aur.archlinux.org/paru.git</span>
<span id=cb25-2><a href=#cb25-2 aria-hidden=true tabindex=-1></a><span class=bu>cd</span> paru</span>
<span id=cb25-3><a href=#cb25-3 aria-hidden=true tabindex=-1></a><span class=ex>makepkg</span> <span class=at>-si</span></span></code></pre></div><ol type=1 start=3><li>Create standard directories:</ol><div class=sourceCode id=cb26><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb26-1><a href=#cb26-1 aria-hidden=true tabindex=-1></a><span class=fu>mkdir</span> <span class=at>-p</span> ~/Applications ~/Documents ~/Desktop ~/Downloads</span></code></pre></div><ol type=1 start=4><li>Setup SSH keys:</ol><div class=sourceCode id=cb27><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb27-1><a href=#cb27-1 aria-hidden=true tabindex=-1></a><span class=fu>ssh-keygen</span> <span class=at>-t</span> ed25519 <span class=at>-C</span> <span class=st>"you@example.com"</span> <span class=at>-f</span> ~/.ssh/id_ed25519 <span class=at>-N</span> <span class=st>""</span></span>
<span id=cb27-2><a href=#cb27-2 aria-hidden=true tabindex=-1></a><span class=fu>ssh-keygen</span> <span class=at>-t</span> rsa <span class=at>-b</span> 4096 <span class=at>-C</span> <span class=st>"you@example.com"</span> <span class=at>-f</span> ~/.ssh/id_rsa <span class=at>-N</span> <span class=st>""</span></span></code></pre></div><ol type=1 start=5><li>Add user to audio group:</ol><div class=sourceCode id=cb28><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb28-1><a href=#cb28-1 aria-hidden=true tabindex=-1></a><span class=ex>usermod</span> <span class=at>-aG</span> audio nana</span></code></pre></div><ol type=1 start=6><li>List fonts:</ol><div class=sourceCode id=cb29><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb29-1><a href=#cb29-1 aria-hidden=true tabindex=-1></a><span class=ex>fc-list</span></span></code></pre></div><ol type=1 start=7><li>Setup Bluetooth:</ol><div class=sourceCode id=cb30><pre class="sourceCode bash"><code class="sourceCode bash"><span id=cb30-1><a href=#cb30-1 aria-hidden=true tabindex=-1></a><span class=ex>bluetoothctl</span></span>
<span id=cb30-2><a href=#cb30-2 aria-hidden=true tabindex=-1></a><span class=ex>power</span> on</span>
<span id=cb30-3><a href=#cb30-3 aria-hidden=true tabindex=-1></a><span class=ex>discoverable</span> on</span>
<span id=cb30-4><a href=#cb30-4 aria-hidden=true tabindex=-1></a><span class=ex>pairable</span> on</span>
<span id=cb30-5><a href=#cb30-5 aria-hidden=true tabindex=-1></a><span class=ex>scan</span> on</span>
<span id=cb30-6><a href=#cb30-6 aria-hidden=true tabindex=-1></a><span class=ex>pair</span> <span class=op><</span>MAC<span class=op>></span></span>
<span id=cb30-7><a href=#cb30-7 aria-hidden=true tabindex=-1></a><span class=ex>trust</span> <span class=op><</span>MAC<span class=op>></span></span>
<span id=cb30-8><a href=#cb30-8 aria-hidden=true tabindex=-1></a><span class=ex>connect</span> <span class=op><</span>MAC<span class=op>></span></span></code></pre></div><hr><p>Your minimal Arch Linux system is now installed and ready for further customization.