Skip to content

Instantly share code, notes, and snippets.

@NoCrypt
Last active February 11, 2026 23:01
Show Gist options
  • Select an option

  • Save NoCrypt/08bae153bba9622186f7a1cc5fcf4080 to your computer and use it in GitHub Desktop.

Select an option

Save NoCrypt/08bae153bba9622186f7a1cc5fcf4080 to your computer and use it in GitHub Desktop.

Personal Arch Installation Guide

Remember, if this didn’t fit your needs, or if it didn’t clear. Go check the wiki.

Preparation

  1. Download the latest Arch Linux ISO from the official website
  2. Create a bootable USB drive using a tool like Rufus, Etcher, or Ventoy.
  3. Boot from the USB drive

Getting Internet Connection (wifi)

# 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

Disk Partitioning

# 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)

Install system

# 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

Post-installation

#---
# 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 -Syu

Pre-DE

Install 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 nvtop

adjust accordingly with your GPU

[alternative] You can also use chwd for this

Check if your driver works:

reboot
nvtop

Desktop Environment

Install your DE of choice. Check list here

In this example, I use hyprland

Hyprland + its hypr* environment:

yay -S hyprland-meta-git

Post-DE

  • 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 -git packages: 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:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment