playdate with arch linux
My system, my rules.
Published: Dec 23, 2025
Updated: Dec 27, 2025
Written by: blockvished
Table of Contents
NOTE: the details expansion are really very unimportant bits that i left for more context so you can skip them and save time
The WHAT
this writeup will cover few various ways to install arch linux on modern setups i.e. UEFI.
with grub, systemdboot, systemd, busybox, zen kernel, and encrypting the / partition with luks and few bits on troubleshooting and ricing and my practical choices that i have made and actually do use
🐧 The WHY
My Linux journey (not important, click to expand anyway)
Got this lappy in q4 2021, like any sane person i immediately abused it with virtual machines instead of doing anything productive and finally started using linux in 2022 due to oh my priwussy and annoying windows issues
I started with distro hopping due to every other os hanging up on me due to ram issue or whatever but it just froze, like it had stage fright where it rehearsed with overpreparation for days and still blanked out after first sentence in front of its crush and finally mx linux xfce did the job which i broke, not once but multiple times and telegram help chat was appalled that someone could destabilize something marketed as boring and rock solid
After ~6-7 month i switched to void linux(lasted 4 month) which was my first actually efficient system. But getting even the basics working took me SEVEN DAYS that includes sway window manager, audio, networking (internet was so hard to setup :(), waybar (topbar), wofi (app picker) and maybe few other minor essentials took whole seven days. I learned a tonn with heavy skill issue and mostly through suffering.
Eventually, i landed on Arch Linux as my artix setup failed and not bc i use arch btw, (some grub issue i couldnt solve at that time im pretty sure) to boot and i had to visit my hometown next day and arch worked, and I’ve stayed ever since bc it just works and i could easily find things i need in pkg manager or aur or build by FAFO, void linux and the community thought me so much
ive wanted to explore nix os for long but well couldnt spare time and my current setup works works exactly the way I need it to so will leave the decision to my future self.
Windows issues
I had to do development on windows and faced so many issues with node, wsl, rust, evm chain development issues and various tooling, freezing, manual installing apps (ye, ik chocolatey exists and have used it for librewolf),file manager refusing to delete and not telling me why or where. forced unexpected updates, telemetry and spy + less security and unfixable system issues with zero transparency
Solution
In linux my system doesnt fight me.
And if using custom setup then you have full control over customization to the point you can be super efficient with keyboard centric workflow using hotkeys (keybinds), ez tooling, toggleable topbars, fullscreen focus, scratchspaces, monitoring, ez update, no reboots, zero telemetry, more secure and everything you can do in windwos but 10x better
The only con used to be in gaming but even that has gotten so much better with proton, wine, bottles and valve (steam) support.
So, I might be a professional noob now :)
This isn’t about being “advanced”.
It’s about control, transparency, and intent.
I use Arch Linux bc it delivers excellent performance and speed on my HP 14 laptop which has a subpar processor and with no dedicated GPU (just integrated Radeon graphics) and 16 GB of RAM (upgraded from 8). Paired with the Zen kernel, the laptop feels noticeably snappier.
What makes it truly efficient for me is zen kernel and the window managers where being able to jump to any workspace instantly and having useful keybinds for special features and monitoring.
And when something does break, which is extremely extremely rare, maybe once a year if it unfortunately does happen, you can diagnose and fix it, tho it might take more or less time depending on the issue, but the system never feels like a black box fighting back.
The reason to write this is mainly to make my future installation and troubleshooting process very easy and seamless and btw if the reader benefits along the way then thats a win win
⚙️ The HOW
aka: “how to install Arch without losing your sanity (mostly)”
Assumptions:
- You’re booted into the
Arch ISOusing a bootable media - personally, i use a 64GB sandisk pen drive with ventoy installed on it where i can use it as a data storage + live usb media (in case there is an issue)
- Disk =
/dev/vda(change it if yoursnvme0n1orsdaor whatever)
0] making the console readable and keyboard usable (optional but do it)
setfont ter-132b
or
setfont -d
# choose your keyboard
loadkeys us
1] connect to the internet
choose any of the below methods to connect to internet
How it works
-
Ethernet
systemd-networkddetects a live link and automatically runs DHCP.
Plug cable -> get IP -> done. -
wifi via
iwctl(iwd)
iwdhandles authentication, association, DHCP, and DNS on its own.
You connect once and it just works. -
wifi via
wpa_supplicant
Authentication is handled bywpa_supplicant, but IP assignment is manual
usingdhcpcd. More steps, more control, more chances to typo.
All methods end at the same place -> a valid IP address + working DNS
1a) ethernet
If you have a cable, plug it in.
1b) wifi using iwctl
The ISO ships with iwd so we can use iwctl
# start the interactive iwctl shell
iwctl
# list wireless devices (usually wlan0 is your interface)
device list
# scan for networks using your wifi interface, my case wlan0
station wlan0 scan
# list discovered networks
station wlan0 get-networks
# connect to your wifi ssid
station wlan0 connect YOUR_WIFI_NAME
exit
1c) wifi using wpa_supplicant (hard way but works)
the painful trouble
i would recommend using iwctl, but ive used this method due to yt vid or internet teaching me to connect
# identify your interface
ip link
# set it up
ip link set wlan0 up
# generate config (and print your password on screen, nice)
wpa_passphrase YOUR_WIFI_NAME YOUR_WIFI_PASSWORD > /etc/wpa_supplicant.conf
# start the wpa_supplicant in background
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
# manually request an IP address
dhcpcd wlan0then verify:
ping -c 3 archlinux.orgif you get name resolution failure or something similar then that means youre not connected, and you need to connect somehow
2] prepare the disk (Optional)
We can overwrite the drive with random data. This prevents data recovery but takes time.
(Note: Replace /dev/vda in the following commands with your actual drive name found above, e.g., /dev/nvme0n1 or /dev/sda)
check your type
lsblk -d -o NAME,ROTA,TYPE,SIZE,MODEL,TRAN
# outputs
NAME ROTA TYPE SIZE MODEL TRAN
nvme0n1 0 disk 476.9G KINGSTON OM8SBP3512K-AH nvmeif rota is 0 then go with ssd else go with hdd
2a) For NVMe/SSD (Instant & Recommended)
# blkdiscard is safer and faster for SSDs than dd
blkdiscard -f /dev/vda
(Optional) paranoid verification checks, that llm gods gave me during my installation
You don’t need these, but if you want peace of mind:
1️⃣ Confirm the disk is empty/unpartitioned
lsblk /dev/vda
You should see no partitions (or just a raw disk).
2️⃣ Try reading random data (it should be zeros / empty)
hexdump -C /dev/vda | head
On a discarded SSD/virtio disk, this is usually:
all zeros, or
immediate EOF
Both are fine.
3️⃣ Check discard support (purely informational)
lsblk -D /dev/vda
give the above in portion markdown so it is pastable
2b) For HDD (The "Old School" way)
# it is for very very slow but well
dd if=/dev/urandom of=/dev/vda bs=4096 status=progress
3] slicing the drive (create partition layout using cfdisk)
NOTE: we use cfdisk bc fdisk is for masochists
cfdisk /dev/vda
in cfdisk:
- Select GPT
- Delete existing partitions
- New -> 512M -> Type: EFI System (/dev/vda1)
- New -> Remaining Size -> Type: Linux filesystem (/dev/vda2)
- Write -> Type yes
- Quit
you just killed the old os, if it lived there
4] formatting & The priwussy layer (luks encryption - Linux Unified Key Setup)
making sure the data is safe from prying eyes
# Format the EFI partition
mkfs.fat -F32 /dev/vda1
# Encrypt the main partition
cryptsetup luksFormat /dev/vda2
# Type YES in all caps when asked (YES, it’s annoying)
# Enter a super strong passphrase which you will actually remember, i will use `i forgot` as password since we ball, pls dont copy me
# If you forget this passphrase: embrace regret
# Open the encrypted container
cryptsetup open /dev/vda2 cryptroot
# 'cryptroot' is just a label. Run `lsblk` to see it living inside vda2, if you see cryptroot label under the partition, youre going in right direction
5] Forging the Inner Sanctum
Now we format the decrypted space so we can actually use it.
mkfs.ext4 /dev/mapper/cryptroot
im using ext4 but you can use the modern feature rich btrfs where youre on your own for now, unless i update this story
6] Mounting the Beast
Assembling the system structure.
mount /dev/mapper/cryptroot /mnt
mkdir -p /mnt/boot # or mkdir /mnt/boot
mount /dev/vda1 /mnt/boot
# remember to use the correct partitions, vda1 is 512M cfdisk EFI
7] speed up pacman (optional, do it, in modern isos it could be default)
bc life is too short for single thread donlods less wait, more smug :)
nano /etc/pacman.conf
# Scroll down and uncomment
# Uncomment or set:
# "ParallelDownloads = 5"
# Ctrl+O (Save), Enter, Ctrl+X (Exit)
8] Install base system
pacstrap /mnt base base-devel linux linux-firmware cryptsetup efibootmgr nano nvim networkmanager
9] Generate fstab
genfstab -U /mnt > /mnt/etc/fstab
what is fstab?
/etc/fstab (file systems table) tells the system:
- Which partitions exist
- Where to mount them
- How to mount them
- In what order at boot
If fstab is wrong -> system drops you into emergency mode at boot If it’s missing -> nothing mounts automatically
catview
cat /mnt/etc/fstab
10] arch-chroot
explanations in future, cant be arsed atp
arch-chroot /mnt
11] Timezone
# find your timezone, by doing tab completions after below cmd
ls /usr/share/zoneinfo
# set it up by linking to file, imma choose bermuda
ln -sf /usr/share/zoneinfo/Atlantic/Bermuda /etc/localtime
# sync it with hardware clock
hwclock --systohc
# check using date cmd
date
12] Locale
nano /etc/locale.gen
# uncomment yours, usually it is the one below in most cases
en_US.UTF-8 UTF-8
# generate
locale-gen
# Generating the language. If you didn't uncomment en_US.UTF-8 in /etc/locale.gen, prepare for boxes instead of letters.
# add the below text in
nano /etc/locale.conf
`LANG=en_US.UTF-8`
or
echo "LANG=en_US.UTF-8" > /etc/locale.conf
13] Hostname
choose the name for your host machine
echo "void" > /etc/hostname
14] Root password
passwd
15] add user and allow him to sudo
# add user w/ wheel group and set passwd
useradd -m -G wheel -s /bin/bash em
passwd em
# give sudo permission to user, by uncommenting the wheel, and you unlocked the superpower to break systems using sudo :')
EDITOR=nano visudo
`%wheel ALL=(ALL:ALL) ALL`
16] Initramfs Configuration (CRITICAL)
nano /etc/mkinitcpio.conf
# find the HOOKS line and add the sd-encrypt, systemd initramfs (recommended)
HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block sd-encrypt filesystems fsck)
or
# Busybox initramfs (classic)
HOOKS=(base udev autodetect modconf block keyboard encrypt filesystems fsck)
# build images
mkinitcpio -P
# If you get error for `/etc/vconsole.conf` file not found:
echo "KEYMAP=us" > /etc/vconsole.conf
# retry images
mkinitcpio -P
# Sanity check (after rebuild)
lsinitcpio /boot/initramfs-linux.img | grep systemd
<details>
<summary><strong>Note: unimportant</strong></summary>
<>
you can also use encrypt or sd-encrypt in HOOKS if i understand it correct but in the bootloader config
you need to add
#### systemdboot
encrypt
`options cryptdevice=UUID=<UUID>:cryptroot root=/dev/mapper/cryptroot rw`
sd-encrypt
`options rd.luks.name=<UUID>=cryptroot root=/dev/mapper/cryptroot rw quiet`
#### grub
encrypt
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<UUID>:cryptroot root=/dev/mapper/cryptroot"
sd-encrypt
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
GRUB_CMDLINE_LINUX="rd.luks.name=<UUID>=cryptroot root=/dev/mapper/cryptroot"
</>
</details>
17] Bootloader
17a] systemdboot
systemd-boot + systemd initramfs
bootctl install
add below in
nano /boot/loader/loader.conf
timeout 2
console-mode keep
default arch.conf
blkid -o value -s UUID /dev/vda2 >> /boot/loader/entries/arch.conf
add below in
/boot/loader/entries/arch.conf
use below method to move the UUID in the file
ctrl k to cut
paste using ctrl u
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options rd.luks.name=<UUID>=cryptroot root=/dev/mapper/cryptroot rw quiet
you can also add one of the below lines after installing
sudo pacman -S amd-ucode
should be added before any other initrd
initrd /amd-ucode.img
example
title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options rd.luks.name=<UUID>=cryptroot root=/dev/mapper/cryptroot rw quiet
or even, initrd /intel-ucode.img
systemd-boot + busybox initramfs
follow above steps but options should be as
options cryptdevice=UUID=<UUID>:cryptroot root=/dev/mapper/cryptroot rw
17b] grub
grub + busybox initramfs
pacman -S grub
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
blkid -o value -s UUID /dev/vda2 >> /etc/default/grub
nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
GRUB_CMDLINE_LINUX="rd.luks.name=<UUID>=cryptroot root=/dev/mapper/cryptroot"
# This tells GRUB how to unlock the door.
grub-mkconfig -o /boot/grub/grub.cfg
# Manifesting the config into existence.
# if you have no encryption then simply grub-mkconfig
# check if installed
grep luks /boot/grub/grub.cfg
# if you see output then it worked
grub + systemd initramfs
follow above steps but slight change
cryptdevice=UUID=<UUID>:cryptroot root=/dev/mapper/cryptroot in GRUB_CMDLINE_LINUX
grub-mkconfig -o /boot/grub/grub.cfg grep cryptdevice /boot/grub/grub.cfg
18] Networking
systemctl enable NetworkManager
OR systemd-networkd + iwd
systemctl enable systemd-networkd
systemctl enable systemd-resolved
pacman -S iwd
systemctl enable iwd
Finished
exit reboot
Final Thoughts
imma write other stuff but want to get this one out bc being perfectionist wont help me and it will never be perfect, im trying tho
what next?
install a desktop env like kde or anything and be done
or
mine is partly something as below
hyprland fonts.... kitty # terminal waybar # topbar wofi or rofi # for app management and other zsh # shell pipewire # audio nm-applet # network bibata # mouse pointer yazi, thunar or dolphin # terminal file exp and gui file exp nvim, zed or vscode # code editors hyprsunset and gammastep # bluelight zen browser or chromium or brave with ublockorigin, darkreader ext swappy slurp # screenshot wf-recorder # screenrec fastfetch, btop # monitoring + aesthetics dunst or mako # notifications keypass # password manager wlogout, hyprlock, swaylock # log? cliphist # clipboard manager create emoji picker wine, proton, steam, bottles, discod # cross window compatible games other stuff that you might need like swww, quickshell, signal, tg, power manage, bluelight, idle inhibitor, weather, hints etc etc
i plan to add things like (but cant guarantee)
-
custom sddm
-
add zen kernel
-
swap
-
audio
-
my keybind etc
-
vb keyboard and directory share
-
openvpn or some client setup
-
install scripts
-
add navigation to this page for quick access
-
and all the above stuff from
what nexteven things that i like from end4 configs