Index

Install Arch Linux

Install Arch Linux is thing I always want to do for my laptop/PC since I had my laptop in ninth grade.

This is not a guide for everyone, this is just save for myself in a future and for anyone who want to walk in my shoes.

Installation guide

Pre-installation

Check disks carefully:

lsblk

USB flash installation medium

Verify the boot mode

Check UEFI mode:

ls /sys/firmware/efi/efivars

Connect to the internet

For wifi, use iwd.

Partition the disks

GPT fdisk:

cgdisk /dev/sdx

Partition scheme

UEFI/GPT layout:

Mount point Partition Partition type Suggested size
/mnt/efi /dev/efi_system_partition EFI System Partition 512 MiB
/mnt/boot /dev/extended_boot_loader_partition Extended Boot Loader Partition 1 GiB
/mnt /dev/root_partition Root Partition

BIOS/GPT layout:

Mount point Partition Partition type Suggested size
BIOS boot partition 1 MiB
/mnt /dev/root_partition Root Partition

LVM:

# Create physical volumes
pvcreate /dev/sdaX

# Create volume groups
vgcreate RootGroup /dev/sdaX /dev/sdaY

# Create logical volumes
lvcreate -l +100%FREE RootGroup -n rootvol

Format:

# efi
mkfs.fat -F32 /dev/efi_system_partition

# boot
mkfs.fat -F32 /dev/extended_boot_loader_partition

# root
mkfs.ext4 -L ROOT /dev/root_partition

# root with btrfs
mkfs.btrfs -L ROOT /dev/root_partition

# root on lvm
mkfs.ext4 /dev/RootGroup/rootvol

Mount:

# root
mount /dev/root_partition /mnt

# root with btrfs
mount -o compress=zstd /dev/root_partition /mnt

# root on lvm
mount /dev/RootGroup/rootvol /mnt

# efi
mount --mkdir /dev/efi_system_partition /mnt/efi

# boot
mount --mkdir /dev/extended_boot_loader_partition /mnt/boot

Installation

pacstrap -K /mnt base linux linux-firmware

# AMD
pacstrap -K /mnt amd-ucode

# Intel
pacstrap -K /mnt intel-ucode

# Btrfs
pacstrap -K /mnt btrfs-progs

# LVM
pacstrap -K /mnt lvm2

# Text editor
pacstrap -K /mnt neovim

Configure

fstab

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

Chroot

arch-chroot /mnt

Time zone

ln -sf /usr/share/zoneinfo/Region/City /etc/localtime

hwclock --systohc

Localization:

Edit /etc/locale.gen:

# Uncomment en_US.UTF-8 UTF-8

Generate locales:

locale-gen

Edit /etc/locale.conf:

LANG=en_US.UTF-8

Network configuration

Edit /etc/hostname:

myhostname

Initramfs

Edit /etc/mkinitcpio.conf:

# LVM
# https://wiki.archlinux.org/title/Install_Arch_Linux_on_LVM#Adding_mkinitcpio_hooks
HOOKS=(base udev ... block lvm2 filesystems)

# https://wiki.archlinux.org/title/mkinitcpio#Common_hooks
# Replace udev with systemd
mkinitcpio -P

Root password

passwd

Addition

# NetworkManager
pacman -Syu networkmanager
systemctl enable NetworkManager.service

# Bluetooth
pacman -Syu bluez
systemctl enable bluetooth.service

# Clock
timedatectl set-ntp true

Boot loader

systemd-boot

GRUB

General recommendations

Always remember to check dependencies when install packages.

System administration

Sudo:

pacman -Syu sudo

EDITOR=nvim visudo
# Uncomment group wheel

# Add user if don't want to use systemd-homed
useradd -m -G wheel -c "The Joker" joker

# Or using zsh
useradd -m -G wheel -s /usr/bin/zsh -c "The Joker" joker

# Set password
passwd joker

systemd-homed (WIP):

systemctl enable systemd-homed.service

homectl create joker --real-name="The Joker" --member-of=wheel

# Using zsh
homectl update joker --shell=/usr/bin/zsh

Note: Can not run homectl when install Arch Linux. Should run on the first boot.

Desktop Environment

Install Xorg:

pacman -Syu xorg-server

GNOME

pacman -Syu gnome-shell \
	gnome-control-center gnome-system-monitor \
	gnome-tweaks gnome-backgrounds gnome-screenshot gnome-keyring gnome-logs \
	gnome-console gnome-text-editor \
	nautilus xdg-user-dirs-gtk file-roller evince eog

# Login manager
pacman -Syu gdm
systemctl enable gdm.service

KDE (WIP)

pacman -Syu plasma-meta \
	kde-system-meta

# Login manager
pacman -Syu sddm
systemctl enable sddm.service

List of applications

pacman

Uncomment in /etc/pacman.conf:

# Misc options
Color
ParallelDownloads

Pipewire (WIP)

pacman -Syu pipewire wireplumber \
	pipewire-alsa pipewire-pulse \
	gst-plugin-pipewire pipewire-v4l2

Flatpak (WIP)

pacman -Syu flatpak

Improving performance

https://wiki.archlinux.org/index.php/swap#Swap_file

https://wiki.archlinux.org/index.php/swap#Swappiness

https://wiki.archlinux.org/index.php/Systemd/Journal#Journal_size_limit

https://wiki.archlinux.org/index.php/Core_dump#Disabling_automatic_core_dumps

https://wiki.archlinux.org/index.php/Solid_state_drive#Periodic_TRIM

https://wiki.archlinux.org/index.php/Silent_boot

https://wiki.archlinux.org/title/Improving_performance#Watchdogs

https://wiki.archlinux.org/title/PRIME

In the end

This guide is updated regularly I promise.

Feel free to ask me via email or Mastodon