Linux on a laptop, 2020 edition - Arch on Clevo N141CU

Introduction

If you're new into the Linux ecosystem, consider using Ubuntu or elementary instead of Arch unless you're willing to spend a significant amount of time learning about Linux internals.
Furthermore, what I will cover here is well described in the official Arch Linux installation guide

Preparation

As Clevo N141CU (or Galago Pro, if you bought it from System76) doesn't have an optical drive, we're going to use a USB stick.
Download the latest archlinux ISO from the official release site and write it onto your USB stick using dd or Balena Etcher

dd if=archlinux-2020.06.01-x86_64.iso of=/dev/sdc

Replace /dev/sdc with the path of your disk (check it with fdisk -l if you're on a Linux already)

Use a wired connection if you can, but if you cannot, NetworkManager is your ally:

systemctl start NetworkManager.service
nmcli device wifi list
nmcli device wifi connect SSID password password

And that's it; you should have your wireless connection working

Next step is to update the system clock:

timedatectl set-ntp true

Then you should partition the disk. Remember that you need to format EFI partition as FAT32.
When you're done with that, mount proper partitions (I assume you set EFI partition as the first one, swap partition as second, / partition as third, and /home partition as the fourth):

mount /dev/nvme0n0p2 /mnt
mkdir /mnt/boot
mount /dev/nvme0n0p1 /mnt/boot
mkdir /mnt/home
mount /dev/nvme0n0p4 /mnt/home

Arch installation

To install Arch Linux on the system, you have just prepared simply run:

pacstrap /mnt base base-devel vim linux linux-firmware

Generate /etc/fstab file based on current mounts:

genstab -U /mnt >> /mnt/etc/fstab

Chroot into the bootstrapped system:

arch-chroot /mnt

Set your local time zone:

ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime

And synchronize system clock with the hardware clock

hwclock --systohc

Configure and generate locales:

vim /etc/locale.gen

Uncomment the lines according to what you need. In my case it's

  • en_US.ISO-8859-1
  • en_US.UTF-8
  • pl_PL.UTF-8
  • pl_PL.ISO-8859-2

And run locale-gen so the system may generate proper files.

After we have our locale generated, we need to set them for our system. To do this, edit file /etc/locale.conf and set the LOCALE variable to your needs. In my case there's a line LOCALE=en_US.UTF-8

We also need to "name" our machine somehow, edit /etc/hosts and add corresponding lines to /etc/hosts. I've named my machine thor and my /etc/hosts look like this:

# See hosts(5) for details.
127.0.0.1 localhost
::1	  localhost
127.0.1.1 thor.local thor

We need to create initial ramdisk, in Arch we have mkinitcpio bash script for that:

mkinitcpio -p linux

We also need to install a bootloader, and as we're using EFI and have Intel CPU, we should keep this in mind.

pacman -S grub efibootmgr intel-ucode
efibootmgr
grub-install --target=x86_64-efi --efi-directory=/efi/ --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

That's everything you need to do to have a running system. As the last few steps, I'd set the root password, using passwd and add a new user with the ability to sudo

useradd -m -s /bin/bash mkozak
passwd mkozak
pacman -S sudo
gpasswd -a mkozak sudo

And as the last steps:

pacman -S networkamanager

To not end without networking after reboot, then Ctrl+D to exit chroot, umount disks, and reboot

umount -R /mnt
reboot

And voila, after removing your USB stick, you should boot into freshly installed Arch.