arch i3 interface tutorial

Installing Arch Linux — step-by-step tutorial

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

  1. Download the latest Arch ISO from the official site.
    Choose a mirror geographically close to you.
  2. Find your USB block device (example: /dev/sdb or /dev/nvme0n1).
    Important: use the device node without a trailing partition number (e.g. /dev/sdb, not /dev/sdb1).
  3. 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.

  1. 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 d repeatedly 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 -32G if 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)

  1. Find swap UUID:
blkid | grep swap
  1. 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
  1. Add resume to 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.ext4 is equivalent to mkfs -t ext4.
  • If you prefer DHCP only, NetworkManager alone is sufficient.
  • If using NVIDIA, install nvidia or nvidia-dkms packages 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.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *