I installed Arch from the 2019-02 image on 2019.03.10. I followed the official installation guide on the Arch wiki. I’m writing down my observations because I tripped up in a few places, because I learned a lot, and because I will inevitably refer to this when I install it again. ;)


I made the live USB using Etcher, verified the file integrity, and booted in (for future reference: my laptop’s boot menu launches on F12; it’s a Lenovo Ideapad).

  • Verify the boot mode – I have a UEFI motherboard, so I ran # ls /sys/firmware/efi/efivars.
  • Connect to wifi using:
# wifi-menu
  • Enable NTP:
timedatectl set-ntp true
  • Previously, I had an Ubuntu install on this computer, so I didn’t have to partition anything; the existing partitions were good enough.
    • Output of lsblk at the time of writing, for reference:
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 931.5G  0 disk
├─sda1   8:1    0   512M  0 part /efi
└─sda2   8:2    0   931G  0 part /
sr0     11:0    1  1024M  0 rom  
  • I had a partition for EFI and one for the Linux filesystem. I chose to go with an ext4 filesystem for this install.
# mount /dev/sda2 /mnt
# mkdir /mnt/efi
# mount /dev/sda1 /mnt/efi
  • Refresh keys. (I didn’t use the latest image so I needed this step.)
# pacman -S archlinux-keyring
# pacman-key --refresh-keys
  • Reorder mirrors using reflector:
# pacman -S reflector
# reflector --verbose --sort rate --protocol https --fastest 50 --number 100 --save /etc/pacman.d/mirrorlist
  • Then, using pacstrap, run:
# pacstrap /mnt base base-devel grub efibootmgr
- `base-devel` contains utilities like `sudo` which we need.
- `grub` and `efibootmgr` are required for booting -- don't forget to
  install these just because the installation guide doesn't explicitly
  specify it!
  • Make fstab
  • Chroot
  • Configure GRUB. Note that /mnt is equivalent to / in this environment, so /mnt/efi becomes /efi.
# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
# grub-mkconfig -o /boot/grub/grub.cfg

The rest is straightforward and can be done following the official installation guide.

I set up my user following the User Management section of the General recommendations; installed display and touchpad drivers; installed all my dotfiles from Ubuntu (set up Oh My Zsh and Spaceship prompt, installed my Vim plugins); set up X and AwesomeWM.

It took me around 45 minutes to an hour to install Arch, then a couple more hours to get everything set up to my liking so that I could be somewhat productive.

Packages I installed

zsh vim \
iw dialog wpa_supplicant \
reflector \
xorg awesome \
openssh \
linux-headers linux-lts linux-lts-headers \
firefox wget ufw \
ristretto vlc pulseaudio pulseaudio-alsa \
xclip scrot cups sane redshift \
htop rsync git mercurial \
grub efibootmgr
  • zsh and vim, because once you get used to them you can’t go back to bash and nano
  • iw, dialog, and wpa_supplicant for wifi-menu
  • reflector for updating mirrors as described above; I used it a fair bit travelling this summer too.
  • xorg display server
  • Awesome window manager instead of a desktop environment
  • openssh for SSH
  • linux-headers, linux-lts, linux-lts-headers, and base-devel because they were recommended to me. I don’t think I’d install linux-lts* if I were to install now.
  • firefox for obvious reasons
  • wget because I love the mirror option (wget -m some.website)
  • ufw for configuring iptables rules
  • ristretto image viewer
  • vlc
  • pulseaudio, pulseaudio-alsa for sound
  • xclip because I like managing the clipboard from the commandline
  • scrot for screenshots
  • cups for printing
  • sane for scanning
  • redshift, a red light filter
  • htop because I use it often and because I read somewhere that it’s very satisfying to open htop after installing Arch and be able to understand everything (spoiler: it’s the best)
  • rsync – this will change your life if you don’t already use it. In short, it saves time by syncing the differences between files instead of copying/overwriting whole files. But it’s a very flexible tool and worth learning; I’d encourage you to read a good tutorial on it, such as this one from DigitalOcean.
  • Git and Mercurial for version control.

Where I stumbled:

  • Couldn’t use pacstrap because I was using an older image – had to refresh keys
  • Didn’t know that lines after exec ... are ignored in .xinitrc, so wasted some time reinstalling X.
  • Forgot to install GRUB.
  • Forgot to generate GRUB config.

It was a productive afternoon; it was challenging, and I enjoyed it! Two months later, I’ve made many more tweaks and changes, which I’ll detail in a future post. In my experience, it has been a tremendous improvement over Ubuntu, partly because it only has things that I’ve set up and partly because I’m the one who set it up. And there’s a lot to love about being on a rolling-release distro. I couldn’t be happier with my OS :)