Remember, if this didn’t fit your needs, or if it didn’t clear. Go check the wiki.
- Download the latest Arch Linux ISO from the official website
- Create a bootable USB drive using a tool like Rufus, Etcher, or Ventoy.
- Boot from the USB drive
# Check your device
iwctl device list
# Scan for Wi-Fi SSID (Replace DEVICE with your device id from above)
iwctl station DEVICE scan
# Get your Wi-Fi SSID
iwctl station DEVICE get-networks
# Connect them (Replace SSID and PASSPHRASE with your wifi ssid and password)
iwctl --passphrase=PASSPHRASE station DEVICE connect SSID
# Ping github since it's sometimes didnt accept ipv6
ping github.com
# If ipv6 error happens
sysctl -w net.ipv6.conf.all.disable_ipv6=1
# Sync your clock
timedatectl# Identify the disk
fdisk -l
# Create 2 Linux System partitions,
# 2GB for /boot, and the rest of your choice for root.
# (How? read instruction on screen)
fdisk
# Format your main partition with BTRFS
mkfs.btrfs -L arch /dev/nvmeXY
# Mount the filesystem
mount /dev/nvmeXY /mnt
# Create subvolumes (recommended BTRFS practice)
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@var
# Unmount and remount with subvolumes
umount /mnt
mount -o subvol=@,compress=zstd,noatime /dev/nvmeXY /mnt
mkdir -p /mnt/home
mkdir -p /mnt/var
mount -o subvol=@home,compress=zstd,noatime /dev/nvmeXY /mnt/home
mount -o subvol=@var,compress=zstd,noatime /dev/nvmeXY /mnt/var
# Format boot partition
mkfs.ext4 /dev/nvmeZX # Replace with your BOOT partition (2gb we created earlier)
mkdir -p /mnt/boot
mount /dev/nvmeZX /mnt/boot
# Mount EFI partition
mkdir -p /mnt/boot/efi
mount /dev/nvmeXZ /mnt/boot/efi # Replace with your EFI partition (NOT BOOT PARTITION)# If you're using an old archlinux iso, update the keyring first
pacman -Sy
pacman -S archlinux-keyring
# Install base packages
pacstrap /mnt base base-devel linux-zen linux-zen-headers linux-firmware btrfs-progs nano
# Generate fstab file
genfstab -U /mnt >> /mnt/etc/fstab
# Chroot into the new system
arch-chroot /mnt
# Set timezone (Change region and city, list can be seen using "timedatectl list-timezones")
ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
hwclock --systohc
# Localization
sed -e '/en_US.UTF-8/s/^#*//g' -i /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
# Hostname
echo "your-hostname" > /etc/hostname
nano /etc/hosts # Add entries for localhost and your hostname
# /etc/hosts ------------------------------------------------
# localhost entries
127.0.0.1 localhost
::1 localhost
# Your hostname entry
127.0.1.1 your-hostname.localdomain your-hostname
# ------------------------------------------------------------
# Set root password
passwd
# Create a user (change to your user name)
useradd -m -G wheel -s /bin/bash yourusername
passwd yourusername
# Install more stuff
pacman -S grub efibootmgr os-prober networkmanager
# Setting up GRUB
nano /etc/default/grub
# Make sure these lines are uncommented: GRUB_DISABLE_OS_PROBER=false
# also add "GRUB_DEFAULT=saved" and "GRUB_SAVEDEFAULT=true"
# Install GRUB
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
pacman -S amd-ucode # or intel-ucode, adjust to your CPU
# Generate GRUB configuration
os-prober # Verify it detects your windows
grub-mkconfig -o /boot/grub/grub.cfg
# Enable internet on next boot
systemctl enable NetworkManager
# Exit chroot, unmount and reboot
exit
umount -R /mnt
reboot#---
# Login with root
# Username: root
# Install sudo
pacman -S sudo
# Configure sudo to allow the wheel group to use sudo
EDITOR=nano visudo
# Uncomment "%wheel ALL=(ALL) ALL"
# or uncomment "%wheel ALL=(ALL) NOPASSWD: ALL" if you prefer no sudo password
# Logout
exit
#---
# Login with yourusername
# Username: yourusername
# Connect to wifi
nmtui
# Change to hw clock for windows clock sync
timedatectl set-local-rtc 1
# Reflector for updating your pacman mirrorlist
sudo pacman -S reflector
EDITOR=nano
sudo systemctl edit --full reflector.timer
# or sudo nano /etc/xdg/reflector/reflector.conf
# /etc/xdg/reflector/reflector.conf -------------
--save /etc/pacman.d/mirrorlist
--country France,Germany
--protocol https
--latest 15
--sort rate
#----------------------------------------------
sudo systemctl enable reflector.timer
sudo systemctl start reflector.timer
sudo systemctl start reflector.service # Update immidiately
# Pacman disable debug packages
sudo nano /etc/makepkg.conf
# add "!debug" in OPTIONS=
## YAY ##
# Install yay
sudo pacman -S git base-devel
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
# cleanup
cd ..; rm -rf yay
## SNAPPER - File recovery system ##
# Install btrfs related stuff
yay -S snapper
# Setup snapper
sudo snapper -c root create-config /
sudo snapper -c home create-config /home # if you want snapper in /home too
# Check if snapshots work
sudo snapper -c root create -d "Test snapshot"
sudo snapper -c root list
# Add snapper rollbacks to grub entries (optional)
yay -S grub-btrfs
# Backup your root everytime you install something (optional)
yay -S snap-pac
# if you wanna adjust more stuff: https://wiki.archlinux.org/title/Snapper#Enable/disable
## ZRAM SWAP ##
# install and make config
sudo pacman -S zram-generator
sudo mkdir -p /etc/systemd/zram-generator.conf.d
sudo nano /etc/systemd/zram-generator.conf.d/zram.conf
# /etc/systemd/zram-generator.conf.d/zram.conf ---------------------------
[zram0]
# Set the compression algorithm (lzo, lz4, zstd)
compression-algorithm = zstd
# Use a fraction of your RAM (0.5 means 50% of your RAM)
zram-fraction = 0.5
# Or set a specific size in MiB (uncomment to use instead of zram-fraction)
# zram-size = 8192
# Maximum swap size on zram device
max-zram-size = 8192
# Swappiness value (lower values reduce swap usage)
# Optional, default is system value from /proc/sys/vm/swappiness
swappiness = 180
#-------------------------------------------------------------------------
# Enable and start the zram device
sudo systemctl daemon-reload
sudo systemctl restart systemd-zram-setup@zram0.service
# Check if zram swap is working
swapon --show
free -h
# setup sysctl swappiness
sudo nano /etc/sysctl.d/99-swappiness.conf
# /etc/sysctl.d/99-swappiness.conf --------------------------------------
vm.swappiness=180
vm.page-cluster=0
vm.vfs_cache_pressure=50
#-------------------------------------------------------------------------
# Apply changes immediately
sudo sysctl --system
# MultiLib support since we gonna install steam later
sudo nano /etc/pacman.conf
# Uncomment [multilib] and the line under it
# Update the whole system
sudo pacman -SyuInstall NVIDIA driver or AMD GPU driver
Since we’re using custom kernel, use dkms if applicable.
Also since I have dual gpu, I install both. (laptop)
For GPU setup, I use this:
yay -S dkms nvidia-open-dkms nvidia-utils egl-wayland lib32-nvidia-utils libva-nvidia-driver mesa vulkan-radeon lib32-vulkan-radeon nvtopadjust accordingly with your GPU
[alternative] You can also use chwd for this
Check if your driver works:
reboot
nvtopInstall your DE of choice. Check list here
In this example, I use hyprland
Hyprland + its hypr* environment:
yay -S hyprland-meta-git- Install a display manager (preferably sddm with where-is-my-sddm-theme)
- Change your keybinds, and wallpaper
- [Asus Laptop Only] Install asusctl, supergfxctl, power-profiles-daemon. more info
- Setup Chaotic AUR for prebuilt
-gitpackages: https://aur.chaotic.cx/docs - Fix emojis: here
- Install your favorite browser, steam, goverlay, mangohud.
- Check and fix your audio setup (play youtube or something)
- Install these: PipeWire, alsa-card-profiles, alsa-utils, alsa-tools, pavucontrol
- (±45 mins) Fix Splitting audio ports in Linux for simultaneous playback (here)
- Install Discord (+vencord patch), xdg-desktop-portal[-hyprland]. Why not vesktop? broken screenshare for me
- Install zed (or neovim, vscode)
- Use cachyos settings as a reference for optimization (here)
- Make arch faster to boot (here) or (official wiki)
Stuff I asked Claude what else to add:
- Configure firewall (ufw or firewalld)
- Set up automatic updates/maintenance (paccache cleanup, orphan removal)
- Configure systemd-boot/GRUB theming if desired
- Install and configure TLP or auto-cpufreq for battery optimization
- Set up TRIM for SSDs (enable fstrim.timer)
- Install thermald for thermal management
- Install file manager + its plugins (thumbnails, archive support)
- Configure default applications (xdg-mime)
- Install fonts (ttf-liberation, noto-fonts, noto-fonts-emoji, nerd-fonts)
- Install btop/htop for system monitoring
- Set up Git configuration (user.name, user.email, SSH keys) [easiest way is to use github-cli]
- Install common archive tools (unzip, unrar, p7zip)
- Install timeshift or snapper for system snapshots
- Configure mpv or VLC
- Install gamemode and enable it
- Set up Proton-GE via ProtonUp-Qt
- Configure wine/lutris if needed
Hyprland stuff
If you rice from scratch:
- Configure waybar or alternative status bar
- Set up wofi/rofi for app launcher
- Install screenshot tool (grim + slurp)
- Install clipboard manager (cliphist, copyq)
- Set up a notification daemon
- Polkit
- etc...
If you wanna try ppl's rice: