First of all, create a bootable USB (or CD) based on the ISO downloaded from the main Arch Linux website and boot it up.

The Arch Linux wiki is probably one of the best I’ve ever used, so the latest basic installation steps can be found here.

Initial steps

Set keyboard layout to UK

1
loadkeys uk

Connect to the Internet before you continue. For my arch linux laptop, I can use ethernet which is the simplest method.

Set timezone and enable NTP

I haven’t had to run these steps in the most recent installation (November 2025) but YMMV

Set the time zone to London and enable NTP for keeping the time/date synchronised.

1
2
timedatectl set-timezone Europe/London
timedatectl set-ntp true

Disk setup

Create your disk partition layouts at this point using the preferred disk partition tool (fdisk, cfdisk, parted etc.) but remember that if you’re enabling encryption, create the partitions accordingly.

I recommend /home being on a separate partition, as if you need to trash your install and start again, your files should be safe.

Formatting a data partition

1
2
3
4
5
# If you're using ext4
mkfs.ext4 /dev/sdaX

# or if you prefer btrfs
mkfs.btrfs /dev/sdaX

Formatting the swap partition

1
mkswap /dev/sda2

Get ready to install (mount drives)

1
2
3
mount /dev/sda3 /mnt
mkdir /mnt/home
mount /dev/sda4 /mnt/home

and if you created a separate /boot partition

1
2
mkdir /mnt/boot
mount /dev/sda1 /boot

and finally enable the swap partition

1
swapon /dev/sda2

Install

This is the main installation step, so you should always include base linux linux-firmware at the bare minimum. But you can include any other packages that you’ll definitely want installing. I tend to leave grub until after I’ve chrooted onto the installation, I’m not sure if it makes any difference though.

1
pacstrap /mnt base base-devel linux linux-firmware sudo git

Create the fstab file

1
genfstab -U /mnt >> /mnt/etc/fstab

Chroot into the installed OS

1
arch-chroot /mnt

Now you’re running commands on your installation!

Next steps…

Set the root password - make it secure!

1
passwd

Set the locale

Edit /etc/locale.gen to uncomment any en_GB entries before generating the locale file

1
2
3
locale-gen
echo LANG=en_GB.UTF-8 > /etc/locale.conf
echo KEYMAP=uk > /etc/vconsole.conf

Set the hardware clock

1
2
ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime
hwclock --systohc

Name the computer (set up hostname)

1
2
echo {name} > /etc/hostname
echo 127.0.1.1 {name}.localdomain {name} >> /etc/hosts

Install zsh (if you prefer it to bash)

1
pacman -S zsh

Add your everyday user account and set the password

(replace zsh with bash if you skipped the last step)

1
2
useradd -m -g users -G wheel -s /bin/zsh {username}
passwd {username}

Add user to sudoers (optional)

Replace {editor} with the editor of choice - nano should already be installed.

1
EDITOR={editor} visudo

Uncomment the line below to allow all users in wheel group to run root commands

1
%wheel ALL=(ALL) ALL

Create a new initramfs file

Remember to update /etc/mkinitcpio.conf if you’re using an encrypted disk to make sure the correct things are loaded before running the following:

1
mkinitcpio -P

Set up grub (bootloader)

1
2
pacman -S grub
grub-install /dev/sda

If you have any customisations to make to the boot command line, make them in /etc/default/grub now!

1
grub-mkconfig -o /boot/grub/grub.cfg

Install any additional utilities, window managers etc.

KDE/Plasma & SDDM

1
pacman -S plasma sddm

Enable the SDDM service so it’s launched on boot:

1
systemctl enable sddm

IceWM

I’ve started using this WM on my HP DM1 (I still use it as it comes in useful for ethernet access on the go), and it’s quite performant.

1
pacman -S xorg xorg-xinit icewm

And then I’ve been using lightdm as the display manager to handle my log in screen:

1
pacman -S lightdm lightdm-gtk-greeter

Terminal

Take your pick from konsole (my preferred in KDE), xterm (very simple), sakura (basic with some features).

There’s also alacritty which is rendered by the GPU, but still works really well on the HP.

Network connectivity

With more recent versions of Arch, it comes with systemd included, so you can use systemd-networkd (already installed) and wpa_supplicant (needs to be installed) to handle your network needs:

1
pacman -S wpa_supplicant

Run networkctl to get your device names before you start.

Ethernet

Create /etc/systemd/network/20-wired.network and paste the following into it (with the necessary changes):

1
2
3
4
5
6
7
8
[Match]
Name=YOUR_ETHERNET_DEVICE_NAME

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes

And then start+enable (or restart) the following:

1
systemctl enable systemd-networkd systemd-resolved

Wireless

Create /etc/systemd/network/10-wireless.network and paste the following into it (again, with the necessary changes):

1
2
3
4
5
6
7
8
[Match]
Name=YOUR_WIRELESS_DEVICE_NAME

[Link]
RequiredForOnline=routable

[Network]
DHCP=ipv4

Now you’ll need to connect to your wireless network. In the following steps, it’s recommended to replace wlo1 with your wireless device name for clarity in the future.

1
2
3
4
5
6
7
8
9
wpa_passphrase mySSID

# Copy the content out and paste into the file created through this:
sudo nvim /etc/wpa_supplicant/wpa_supplicant-wlo1.conf

# And finally, start the wpa_supplicant service and restart systemd-networkd
sudo systemctl start wpa_supplicant@wlo1.service
sudo systemctl restart systemd-networkd.service
sudo systemctl enable wpa_supplicant@wlo1.service

Final steps (and reboot)

Exit from the chroot shell, unmount all partitions and reboot:

1
2
3
exit
umount -R /mnt
reboot

Additional packages

There are additional packages that I might install after a base install. Some of these are related to software development, some are not.

  • Yay (AUR helper, saves a few keypresses for installing packages via AUR)
  • nvm (Node Version Manager - this is available on AUR and can be installed with Yay)
  • OpenSSH (ssh - because it’s not installed by default)
  • Visual Studio Code - I install the MS one from AUR because some plugins that I’ve become pretty used to aren’t in the open repository: visual-studio-code-bin
  • docker and docker-compose (both available from official Arch Linux repositories)
  • kamoso (camera utility for KDE)
  • pulseaudio-equalizer (audio equaliser for pulseaudio - it sets itself up as an additional audio controller, so it affects all audio output)

Fonts

These can be installed from the standard Arch Linux package registry.

  • Hack: ttf-hack
  • Noto Fonts: noto-fonts noto-fonts-emoji noto-fonts-extra

Pantheon Code

Pantheon Code comes with ElementaryOS, but it’s said to be lightweight, which would be ideal for editing code on a low powered portable machine so I tried getting it to run on my DM1 running Arch.

I was able to install it using:

1
sudo pacman -S pantheon-code

But it wouldn’t run from the shortcuts. I eventually pinned it down to being called io.elementary.code and located in /usr/bin so I tried running it from zsh but it told me that it was missing a shared file - libvte-2.91.so which took me a while to figure out which package provided that file, and eventually pinned it down to vte3 which I was able to install using pacman.

This got the app running, but the X button to close the app just doesn’t work at all! So I’ll figure that out next.

Gotchas

After rebooting into the fresh install, the keyboard layout reverts to US

This one puzzled me for longer than it should have done, but eventually I figured it out.

1
setxkbmap gb

Signature is unknown trust

signature from “{name} <{email}>” is unknown trust

As per the Arch docs here, there are a few possible solutions but I’ve had success with installing the archlinux-keyring package and then doing a pacman update:

1
2
sudo pacman -Sy archlinux-keyring
sudo pacman -Su