I love the Dell XPS 13 (2016) that Dell gave me on loan. But installing Arch Linux with UEFI enabled can be challenging for new users — especially since ‘grub’ doesn’t work on this system with Arch Linux. I talked to a lot of people in the Arch community and resorted to using systemd-boot for successful install.

Go to BIOS settings by hitting the F2 key when the system restarts and enable UEFI boot. Under the secure boot setting, disable secure boot.

In this tutorial we are creating a brand new single boot Arch Linux system with 8GB of swap, 40GB of root and the remaining space for storage. I am allocating 40GB for root because I won’t be creating a separate /home partition and will be installing a lot of desktop environments later for testing so, for me, more space is better.

Now download Arch Linux and create a bootable USB flash drive. Once the drive is ready, plug it into your Dell XPS 13, hit F12 when the system boots up and choose this USB Flash drive in the boot menu. You will see the Arch Linux command prompt. Get connected to the internet over wireless, as this laptop doesn’t come with an ethernet port. Then run the following command and follow the instructions on the dialog box to get connected:

# wifi_menu

Use the arrow key to select the network, hit enter (you can ignore profile renaming) and then type the password for the network.

We will be using the parted tool to create a partition table and format the SSD. We will create four partitions: ESP (EFI System Partition), swap, root and storage. First, check the name of your storage device (in my case it was ‘nvme0n1’):

# lsblk

Now open this drive with the parted tool:

# parted /dev/nvme0n1

Create GPT partition table

(parted) mklabel gpt

And now create ESP partition and set it as boot drive:

(parted) mkpart ESP fat32 1MiB 513MiB

(parted) set 1 boot on

Then create root partition of 30GB:

(parted) mkpart primary ext4 513MiB 30GiB

Now create swap partition of 8GB

(parted) mkpart primary linux-swap 30GiB 38GiB

And now create a partition for remaining storage for files

(parted) mkpart primary ext4 38GiB 100%

Exit parted

(parted) quit

Now check the new partitions and take note of their numbers:

# lsblk

We will now format these partitions and mount them in this order: nvme0n1p1 for /boot, nvme0n1p2 for /root, nvme0n1p3 for swap, and nvme0n1p4 for storage

# mkfs.ext4 /dev/nvme0n1p2

# mkfs.ext4 /dev/nvme0n1p4

Now format boot partition:

# mkfs.fat -F32 /dev/nvme0n1p1

And then swap:

# mkswap /dev/nvme0n1p3

# swapon /dev/nvme0n1p3

Now it’s time to mount these partitions.

First mount root:

# mount /dev/nvme0n1p2 /mnt

Then create boot directory:

# mkdir -p /mnt/boot

And mount the boot partition:

# mount /dev/nvme0n1p1 /mnt/boot

(You can mount the remaining space for storage, after the installation is complete.)

We will now be downloading and installing base packages. If you wish, you can edit the mirrorlist file so that you have the closest mirror set for the fastest download speed.

Edit the mirrorlist file:

# nano /etc/pacman.d/mirrorlist

Now use the arrow key and select the mirror closest to you, I chose the US server. Then use Alt+6 to copy that URL and move the cursor on the very top of the list and paste it there (Ctrl+U). Then save and close the file (Ctrl+x).

Install the base packages:

# pacstrap -i /mnt base base-devel

We now have to create fstab on the new system. The following command will create the file and populate it.

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

We now have to configure different components. To do that we have to chroot into the new system: