If you have computer/Linux knowledge, and wish to be part of the “I use arch btw” fan group, here is a step-by-step tutorial on how to install one of Linux’ most popular, yet complex distributions.
Reminder to follow commands and replace device names like /dev/sdx or /dev/nvme0n1 with your devices’ names.
Prerequisites
- A PC that can boot from USB.
- A USB stick (≥ 2 GB).
- A working internet connection for the installer.
- Basic familiarity with the Linux command line.
Getting started
- Download the latest Arch ISO from the official site.
Choose a mirror geographically close to you. - Find your USB block device (example:
/dev/sdbor/dev/nvme0n1).
Important: use the device node without a trailing partition number (e.g./dev/sdb, not/dev/sdb1). - Write the ISO to the USB (example):
sudo dd if=./archlinux-YYYY.MM.DD-x86_64.iso of=/dev/sdb bs=4M oflag=direct conv=fsync status=progress
if you have windows, try Rufus.
Wait until dd finishes and the device has synced.
- Boot the machine from the USB. Open your firmware (UEFI/BIOS) boot menu and select the USB.
Tip: You may need to disable Secure Boot to boot the installer on some systems.
Install base system
1 — Network (optional: Wi-Fi)
From the live environment, if you need Wi-Fi, use iwctl (iwd):
iwctl
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect "YourSSID"
[iwd]# exit
ping -c 3 1.1.1.1
2 — Update package databases
Run as root in live environment:
pacman -Syy
3 — Partition your disk
List disks:
lsblk
Start fdisk on the chosen disk (example uses NVMe name):
fdisk /dev/nvme0n1
Basic fdisk flow (interactive):
- Delete existing partitions: use
drepeatedly until gone. - Create EFI partition (256M):
n→ partition 1 → accept defaults →+256M. - Create Linux root partition:
n→ partition 2 → accept defaults → leave size for root (or-32Gif you want a 32 GiB swap reserve). - Create swap partition:
n→ partition 3 → accept defaults → set desired size. - Set types:
t→ choose partition number → set type (1→ EFI,2→ Linux filesystem,3→ swap). - Write changes:
w
Note: NVMe device names are like /dev/nvme0n1p1, /dev/nvme0n1p2. Regular SATA/USB use /dev/sdb1, /dev/sdb2.
4 — Create filesystems and enable swap
Examples (adjust device names):
mkfs.fat -F32 /dev/nvme0n1p1 # EFI
mkfs.ext4 /dev/nvme0n1p2 # root filesystem
mkswap /dev/nvme0n1p3
swapon /dev/nvme0n1p3
5 — Mount filesystems
mount /dev/nvme0n1p2 /mnt
mkdir -p /mnt/boot/efi
mount /dev/nvme0n1p1 /mnt/boot/efi
6 — Install base packages
Install base system and firmware into the new root:
pacstrap /mnt base linux linux-firmware sudo vim
Generate /etc/fstab:
genfstab -U -p /mnt > /mnt/etc/fstab
7 — Enter new system
arch-chroot /mnt
Basic system configuration (inside chroot)
1 — Locale and timezone
Edit locales and generate:
vim /etc/locale.gen # uncomment en_US.UTF-8 or your locale
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
Set timezone:
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime # change to your zone
hwclock --systohc
2 — Hostname and hosts
echo myhostname > /etc/hostname
vim /etc/hosts
# add:
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname
3 — Users and passwords
Create a user and set passwords:
useradd -m -G wheel,storage,power,audio,video -s /bin/bash yourusername
passwd # set root password
passwd yourusername # set user's password
Enable sudo for wheel group:
visudo
# uncomment:
%wheel ALL=(ALL) ALL
4 — Install bootloader (UEFI)
Install and configure GRUB for UEFI:
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
(If your system uses legacy BIOS, use the appropriate grub-install options.)
5 — Networking
Install NetworkManager (recommended):
pacman -S networkmanager
systemctl enable NetworkManager
Optional: dhcpcd or systemd-resolved can be installed, but NetworkManager covers most needs.
6 — Exit, unmount, reboot
exit
umount -R /mnt
reboot
Remove the USB installer when the system powers off or when prompted.
Post-install: userspace, Xfce4, and i3
Log in as your user after first boot and install packages.
1 — Enable NTP
timedatectl set-ntp true
2 — Install X.Org and utilities
sudo pacman -S xorg xorg-apps xorg-xinit xorg-xlsfonts xdotool xclip xsel
3 — Useful utilities (select what you want)
sudo pacman -S dbus git base-devel reflector sudo vim htop tree dialog \
bash-completion wget rsync inxi powertop lshw
4 — Xfce4 (full desktop)
sudo pacman -S xfce4 xfce4-goodies xfce4-notifyd xfce4-screensaver \
thunar-archive-plugin thunar-media-tags-plugin network-manager-applet
# optional Xfce plugins:
sudo pacman -S xfce4-xkb-plugin xfce4-battery-plugin xfce4-datetime-plugin \
xfce4-mount-plugin xfce4-netload-plugin xfce4-pulseaudio-plugin
5 — i3 (tiling WM)
sudo pacman -S i3-wm i3status i3lock pango lxappearance
# useful extras for i3:
sudo pacman -S polybar rofi alacritty dunst feh xss-lock flameshot
6 — Display manager (optional: ly)
sudo pacman -S ly
sudo systemctl enable ly
You can use other display managers like lightdm, gdm, or log in via TTY and startx.
7 — Fonts
sudo pacman -S ttf-dejavu ttf-freefont ttf-liberation terminus-font \
noto-fonts noto-fonts-emoji ttf-roboto ttf-roboto-mono
8 — Sound (optional)
sudo pacman -S sof-firmware alsa-utils pipewire pipewire-pulse
9 — Bluetooth (optional)
sudo pacman -S bluez bluez-utils blueman
sudo systemctl enable bluetooth
10 — Printing (optional)
sudo pacman -S cups cups-filters system-config-printer
sudo systemctl enable --now cups.service
If system-config-printer is missing in Xfce settings, edit /usr/share/applications/system-config-printer.desktop and set:
Categories=System;Settings;X-XFCE-SettingsDialog;X-XFCE-HardwareSettings;
11 — Mirrors and speed (optional)
Update mirrorlist with reflector:
sudo pacman -S reflector
sudo reflector --country Germany,Austria,Switzerland --fastest 10 \
--threads $(nproc) --save /etc/pacman.d/mirrorlist
Modify --country for your location.
Hibernation (optional)
- Find swap UUID:
blkid | grep swap
- Add resume parameter to GRUB:
sudo vim /etc/default/grub
# set:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=<swap-uuid>"
sudo grub-mkconfig -o /boot/grub/grub.cfg
- Add
resumeto mkinitcpio hooks:
sudo vim /etc/mkinitcpio.conf
# HOOKS example:
HOOKS="base udev resume autodetect modconf block filesystems keyboard fsck"
sudo mkinitcpio -p linux
Then you can hibernate:
sudo systemctl hibernate
Helpful notes & tips
- Always replace device names with your actual devices.
- Back up important data before repartitioning or installing.
- Using
mkfs.ext4is equivalent tomkfs -t ext4. - If you prefer DHCP only,
NetworkManageralone is sufficient. - If using NVIDIA, install
nvidiaornvidia-dkmspackages as needed. - For SSDs, enable
fstrim.timer:
sudo systemctl enable fstrim.timer
- Improve battery life with
tlp:
sudo pacman -S tlp tlp-rdw
sudo systemctl enable tlp
# If using TLP-RDW:
sudo systemctl enable NetworkManager-dispatcher.service
sudo systemctl mask systemd-rfkill.service
sudo systemctl mask systemd-rfkill.socket
Tutorial based on silentz’ github.




