home

playdate with arch linux

My system, my rules.

Published: Dec 23, 2025

Updated: Dec 27, 2025

Written by: blockvished

#linux#code#story

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 ISO using 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 yours nvme0n1 or sda or 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-networkd detects a live link and automatically runs DHCP.
    Plug cable -> get IP -> done.

  • wifi via iwctl (iwd)
    iwd handles authentication, association, DHCP, and DNS on its own.
    You connect once and it just works.

  • wifi via wpa_supplicant
    Authentication is handled by wpa_supplicant, but IP assignment is manual
    using dhcpcd. 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 wlan0

then verify:

ping -c 3 archlinux.org

if 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 nvme

if 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 next even things that i like from end4 configs