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
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.
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
# If you're using ext4
mkfs.ext4 /dev/sdaX
# or if you prefer btrfs
mkfs.btrfs /dev/sdaX
Formatting the swap partition
mkswap /dev/sda2
Get ready to install (mount drives)
mount /dev/sda3 /mnt
mkdir /mnt/home
mount /dev/sda4 /mnt/home
and if you created a separate /boot partition
mkdir /mnt/boot
mount /dev/sda1 /boot
and finally enable the swap partition
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.
pacstrap /mnt base base-devel linux linux-firmware sudo git
Create the fstab file
genfstab -U /mnt >> /mnt/etc/fstab
Chroot into the installed OS
arch-chroot /mnt
Now you’re running commands on your installation!
Next steps…
Set the root password - make it secure!
passwd
Set the locale
Edit /etc/locale.gen to uncomment any en_GB entries before generating the locale file
locale-gen
echo LANG=en_GB.UTF-8 > /etc/locale.conf
echo KEYMAP=uk > /etc/vconsole.conf
Set the hardware clock
ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime
hwclock --systohc
Name the computer (set up hostname)
echo {name} > /etc/hostname
echo 127.0.1.1 {name}.localdomain {name} >> /etc/hosts
Install zsh (if you prefer it to bash)
pacman -S zsh
Add your everyday user account and set the password
(replace zsh with bash if you skipped the last step)
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.
EDITOR={editor} visudo
Uncomment the line below to allow all users in wheel group to run root commands
%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:
mkinitcpio -P
Set up grub (bootloader)
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!
grub-mkconfig -o /boot/grub/grub.cfg
Install any additional utilities, window managers etc.
KDE/Plasma & SDDM
pacman -S plasma sddm
Enable the SDDM service so it’s launched on boot:
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.
pacman -S xorg xorg-xinit icewm
And then I’ve been using lightdm as the display manager to handle my log in screen:
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:
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):
[Match]
Name=YOUR_ETHERNET_DEVICE_NAME
[Link]
RequiredForOnline=routable
[Network]
DHCP=yes
And then start+enable (or restart) the following:
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):
[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.
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:
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:
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.
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:
sudo pacman -Sy archlinux-keyring
sudo pacman -Su