Bare Metal Install Guide — 2025 Edition

A step-by-step guide for people who looked at Ubuntu and thought "nah, I want to suffer more intentionally." No GUI. No hand-holding. Just you, a terminal, and the haunting question of whether you partitioned the right disk.

STEP 01
Optional SSH Access
Because typing on a laptop balanced on your knees is a great way to destroy your spine and mistype /dev/sda.
Do this on the live ISO before anything else if you prefer copy-pasting from a comfy machine.
bash
# Find your IP address
ip a

# Set a password for the live session (NOT your real machine)
passwd

Then SSH in from another machine: ssh root@<IP_FROM_ip_a>

STEP 02
Sync the Clock
Your system clock is probably wrong. Like most things in your life right now. Fix this one at least.
bash
timedatectl set-ntp true
STEP 03
Connect to WiFi
Skip if using ethernet, you sensible person. Otherwise, enter iwctl's little interactive dungeon. It's not as bad as it looks. It's worse.
bash
iwctl
  # Now inside iwctl interactive prompt:
  device list                                # find your WiFi adapter name
  station <device> scan                     # scan for networks
  station <device> get-networks             # list them
  station <device> connect <SSID>           # connect (enter password when asked)
  exit

Replace <device> (e.g. wlan0) and <SSID> with your network name.

STEP 04
Partition the Disk
This is the part where you accidentally wipe your Windows partition and discover inner peace. Double-check you're targeting the right disk.
Verify your disk name first with lsblk. Assumes /dev/sda — yours may be /dev/nvme0n1 or /dev/vda. Destroying data on the wrong disk is a timeless tradition you do not want to join.
bash
cfdisk /dev/sda
📋
Inside cfdisk, create a GPT partition table, then:
1) New → 512M → Type: EFI System
2) New → remaining space → Type: Linux filesystem
Then → Write → type yesQuit
STEP 05
Format & Mount
Give your partitions a filesystem. Like giving a house walls and a floor. Except you're doing it in the dark. With a blindfold. And the house is on fire.
bash
# Format partitions
mkfs.fat -F32 /dev/sda1        # EFI partition
mkfs.ext4 /dev/sda2             # root partition

# Mount them
mount /dev/sda2 /mnt
mkdir -p /mnt/boot
mount /dev/sda1 /mnt/boot
STEP 06
Set Mirrors
Default mirrors are often painfully slow. Like queuing at a government office, but for packages. Use local Bangladeshi mirrors for speed.
bash
nano /etc/pacman.d/mirrorlist

# Add these at the TOP of the file (BD mirrors — fast locally):
Server = http://mirror.limda.net/archlinux/$repo/os/$arch
Server = https://mirror.limda.net/archlinux/$repo/os/$arch
Server = http://mirror.xeonbd.com/archlinux/$repo/os/$arch
Server = https://mirror.xeonbd.com/archlinux/$repo/os/$arch

Save with Ctrl+O, exit with Ctrl+X. If you don't know nano keybinds yet... welcome.

STEP 07
Install Base System
This is the moment. The whole OS gets bootstrapped. Go make tea. Contemplate your choices. Come back in 3 minutes.
bash
pacstrap /mnt base linux linux-firmware nano openssh btop networkmanager
💡Add more packages here if you want them pre-installed — e.g. vim git sudo. It's cheaper now than re-entering chroot later.
STEP 08
Generate fstab
Tell the system how to find its own partitions on boot. Yes, it forgets. Like a goldfish. A goldfish that runs your OS.
bash
genfstab -U /mnt >> /mnt/etc/fstab

# Verify it looks sane (2 entries expected)
cat /mnt/etc/fstab
STEP 09
Enter chroot
You are now inside the new system. Like Inception, but less cool and with more potential for bricking things.
bash
arch-chroot /mnt
STEP 10
System Configuration
Set your hostname, timezone, locale, and root password. All the things you'll forget you set and have to look up in 6 months.
bash
# Hostname — name your machine. Be creative. Or don't.
echo "myhostname" > /etc/hostname

# Timezone — symlink your zone
ln -sf /usr/share/zoneinfo/Asia/Dhaka /etc/localtime
hwclock --systohc

# Locale
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf

# Root password (don't use "password". Or do. I'm a guide, not your dad.)
passwd

# Enable SSH and NetworkManager on boot
systemctl enable sshd
systemctl enable NetworkManager

Replace myhostname and Asia/Dhaka with your actual hostname and timezone. List zones: ls /usr/share/zoneinfo/

STEP 11
Install Bootloader (GRUB)
The thing that actually starts your system. If you get this wrong, you'll get to meet the GRUB rescue shell. It's very minimalist. You'll hate it.
Not sure if you have UEFI or Legacy BIOS? Check: ls /sys/firmware/efi — if the directory exists, you're UEFI. Pick accordingly.
⚡ UEFI / Modern Systems
bash
pacman -S grub efibootmgr

grub-install \
  --target=x86_64-efi \
  --efi-directory=/boot \
  --bootloader-id=GRUB

grub-mkconfig \
  -o /boot/grub/grub.cfg
🖥 Legacy BIOS / Old Iron
bash
pacman -S grub

grub-install \
  --target=i386-pc \
  /dev/sda

grub-mkconfig \
  -o /boot/grub/grub.cfg
STEP 12
Exit, Unmount & Reboot
The moment of truth. Either it boots, or you spend the next hour googling from your phone like a peasant.
bash
exit                    # leave chroot
umount -R /mnt          # unmount everything cleanly
reboot                  # this is it. godspeed.
🎉If it boots: congratulations, you've joined a long tradition of people who could have just used Manjaro but didn't. If it doesn't boot: welcome to the forums. Bring snacks.