Keep Windows and add Arch Linux. Every step explained for beginners.
Keep your existing Windows installation intact and add Arch Linux as a second operating system. Every time you boot, GRUB will ask whether you want to start Windows or Arch. No data loss — Windows stays exactly as it is.
Download the Arch Linux ISO, then write it to a USB drive (at least 2 GB).
Windows users: Use Rufus or Balena Etcher to write the ISO to your USB drive. Select the ISO, pick your USB, and click Start/Flash.
Linux users: Use dd to write the ISO:
# Download the latest Arch Linux ISO
curl -LO https://archlinux.org/releng/releases/2025.03.01/torrent/archlinux-2025.03.01-x86_64.iso.torrent
# Write the ISO to your USB drive (replace /dev/sdX with your USB device!)
sudo dd if=archlinux-2025.03.01-x86_64.iso of=/dev/sdX bs=4M status=progress && sync
Once done, reboot and boot from the USB (press F2/F12/DEL during startup to select the USB drive).
Before touching anything Linux, you need to prepare Windows. Three things must be done:
1. Disable Fast Boot in Windows
Windows path: Control Panel → Power Options → Choose what the power buttons do
→ "Change settings that are currently unavailable"
→ Uncheck "Turn on fast startup" → Save
Fast Boot keeps Windows in a hybrid shutdown state that locks the NTFS partition. If it's enabled, Linux won't be able to access your Windows files and GRUB may not detect Windows.
2. Disable Secure Boot in BIOS
Restart your computer → Press F2/DEL/F12 during boot to enter BIOS
→ Find "Secure Boot" (usually under Boot or Security tab)
→ Set it to "Disabled" → Save & Exit
Secure Boot can block Linux bootloaders. Some motherboards call it "Secure Boot" or "UEFI Secure Boot". If you see a "OS Type" option nearby, set it to "Other OS".
3. Suspend BitLocker (if enabled)
Windows path: Control Panel → BitLocker Drive Encryption
→ Click "Suspend protection" for your C: drive
BitLocker encrypts your Windows drive. Linux cannot read encrypted partitions. Suspend it temporarily — it will resume automatically after you boot back into Windows.
Arch Linux needs its own space on the disk. We'll shrink your Windows partition to create unallocated space — no data will be lost.
Windows path: Right-click Start → Disk Management
→ Right-click C: drive → "Shrink Volume"
→ Enter amount in MB: at least 51200 (50 GB), ideally 102400 (100 GB)
→ Click "Shrink"
How much space do you need? Arch itself takes about 5 GB. The WifeRice dotfiles + applications add another 5-10 GB. You want at least 30 GB free for apps, files, and breathing room. If you have a large disk, give Arch 100+ GB.
After shrinking: Shut down Windows (do NOT use "Restart" — use "Shut down" to ensure a full shutdown). Insert your Arch USB, boot into it, and continue.
Boot from the Arch Linux USB drive. Verify UEFI mode and connect to the internet.
# Verify UEFI mode
ls /sys/firmware/efi/efivars # Must list files
# Connect to WiFi
iwctl
[iwd]# device list
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect "Your WiFi Name"
[iwd]# exit
# Verify connection
ping -c 3 archlinux.org
Beginner tip: If you get "Device not found" in iwctl, try iwctl device list first to see the actual adapter name (it might be wlp2s0 or something similar instead of wlan0).
Now we look at the disk layout and create Arch partitions in the unallocated space. We will NOT touch the Windows partitions.
# List all disks and partitions
lsblk
# Example output for a dual-boot setup:
# NAME SIZE TYPE MOUNTPOINT
# nvme0n1 476.9G disk
# ├─nvme0n1p1 100M EFI System ← Windows EFI (DO NOT TOUCH)
# ├─nvme0n1p2 350G Windows C: ← Windows data (DO NOT TOUCH)
# └─nvme0n1p3 126G Unallocated ← YOUR SPACE for Arch
# Create Arch partitions in the unallocated space
gdisk /dev/nvme0n1
n → new partition
Partition number: [Enter] (accept default)
First sector: [Enter] (accept default = start of free space)
Last sector: +8G → hex code 8200 (Linux swap, optional)
n → new partition
[Enter], [Enter] → hex code 8300 (Linux filesystem, rest of space)
w → write changes and exit
y → confirm
Sharing the Windows EFI partition: In most setups, Windows already created an EFI partition (nvme0n1p1). We can reuse it — GRUB will install its files alongside Windows' bootloader. If you don't have an EFI partition (unusual for modern systems), create a new one in the unallocated space.
ntfs filesystem). Only create new partitions in the unallocated space. If you accidentally wipe Windows, all your data will be lost.After partitioning: Run lsblk again to verify. You should see your new partitions at the end of the list.
Format only the new Linux partitions. Leave the Windows partitions completely alone.
# Format the root partition (replace p4 with your Linux root partition)
mkfs.ext4 /dev/nvme0n1p4
# Only if you created a swap partition:
mkswap /dev/nvme0n1p3 && swapon /dev/nvme0n1p3
# Mount root to /mnt
mount /dev/nvme0n1p4 /mnt
# Mount the Windows EFI partition to /mnt/boot
mount --mkdir /dev/nvme0n1p1 /mnt/boot
Which partition is which? The Windows EFI partition is usually the smallest partition with vfat or fat32 filesystem type (typically 100-500 MB). Your new Linux root partition will be ext4. Run lsblk -f to see filesystem types clearly.
Why mount EFI to /mnt/boot? By placing GRUB on the existing Windows EFI partition, both Windows and Arch share the same EFI system partition. Your motherboard already knows about this partition, so no extra BIOS configuration is needed.
Install Arch's core packages.
# Update mirrors (replace "US" with your country)
reflector --country US --age 6 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
# Install base system
pacstrap -K /mnt base base-devel linux linux-firmware linux-headers
pacstrap /mnt networkmanager vim sudo git
# Generate fstab
genfstab -U /mnt >> /mnt/etc/fstab
# Verify it includes both your root and the EFI partition
cat /mnt/etc/fstab
Why base-devel? It's required for building packages from the AUR (Arch User Repository). The dotfiles installer and many community packages depend on it. Skip only if you're very tight on disk space.
Enter the new system and set up timezone, language, hostname, and password.
# Chroot into the new system
arch-chroot /mnt
# Set timezone (adjust to your location)
ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
hwclock --systohc
# Set locale
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
# Set hostname
echo "arch-dual" > /etc/hostname
# Set hosts file
cat > /etc/hosts << 'EOF'
127.0.0.1 localhost
::1 localhost
127.0.1.1 arch-dual.localdomain arch-dual
EOF
# Set root password
passwd
# Enable NetworkManager
systemctl enable NetworkManager
This is the key step for dual boot. We install GRUB and tell it to scan for Windows so it appears in the boot menu.
# Install GRUB, EFI boot manager, and os-prober
pacman -S grub efibootmgr os-prober
# IMPORTANT: Enable os-prober in GRUB config
echo "GRUB_DISABLE_OS_PROBER=false" >> /etc/default/grub
# Install GRUB to the EFI partition
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
# Scan for Windows
os-prober
# Generate GRUB config (includes both Arch and Windows now)
grub-mkconfig -o /boot/grub/grub.cfg
What os-prober does: It looks at all partitions on all disks and tries to detect other operating systems. When it finds Windows, it adds an entry like Windows Boot Manager to the GRUB menu.
ls /boot/EFI. (3) Secure Boot is still on. (4) The Windows partition is hibernated — boot into Windows and do a full shutdown /s /t 0.What you should see in the output:
# grub-mkconfig should show:
# Found theme: ...
# Found linux image: /boot/vmlinuz-linux
# Found initrd image: ...
# Found Windows Boot Manager on /dev/nvme0n1p1
# Adding boot menu entry for Windows Boot Manager ...
Create your daily-driver user account with sudo privileges.
# Create user (replace 'username' with your desired username)
useradd -m -G wheel,audio,video,storage,power,adbusers username
# Set password
passwd username
# Grant sudo access
EDITOR=vim visudo
# Uncomment: %wheel ALL=(ALL:ALL) ALL
# Exit and reboot
exit
umount -R /mnt
reboot
First boot check: When the computer restarts, you should see the GRUB menu with two options: Arch Linux and Windows Boot Manager. Use the arrow keys to select which OS to start. If you don't see the menu, press and hold Shift (or spam Esc) during boot to force it to appear.
Boot into Arch, connect to the internet, and install the right GPU drivers.
# Connect to WiFi after first boot
sudo nmcli device wifi connect "Your WiFi" password "yourpassword"
# NVIDIA
sudo pacman -S nvidia nvidia-utils nvidia-settings lib32-nvidia-utils
# AMD
sudo pacman -S mesa lib32-mesa xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon
# Intel
sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel
# Install yay (AUR helper) - needed for dotfiles
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay.git /tmp/yay
cd /tmp/yay && makepkg -si
rm -rf /tmp/yay
Beginner tip: If you're on an NVIDIA Optimus laptop, don't worry about GPU switching now — the WifeRice installer handles it automatically in the next step.
The same one-liner. It detects your GPU, installs Hyprland, QuickShell, all widgets, wallpapers, SDDM theme, and applications.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/eprahemi/WifeRice/main/install.sh)"After reboot: You'll see the SDDM login screen. Log in and press Super+W for wallpapers, Super+H for the keybind guide. Want to go back to Windows? Just reboot and pick "Windows Boot Manager" from the GRUB menu.
/mnt/windows or accessible through your file manager. Just don't modify Windows system files from Linux. "Failed to install GRUB"
Make sure you're in UEFI mode (ls /sys/firmware/efi/efivars). If it's empty, your BIOS is in Legacy/CSM mode — switch to UEFI in BIOS settings.
Windows doesn't appear in GRUB
Run os-prober manually after booting into Arch. If it finds nothing, check: Fast Boot disabled? Secure Boot disabled? EFI partition mounted? Run sudo grub-mkconfig -o /boot/grub/grub.cfg again after fixing.
WiFi not working
Some WiFi cards need additional firmware. Run lspci -k to see your network card. Common fixes: sudo modprobe brcmfmac for Broadcom, or install linux-firmware if you skipped it.
"arch-chroot: command not found"
You need to run this from the Arch live USB environment, not from inside your normal system. Reboot from the USB.
Boot hangs at a black screen after GRUB
This is usually a GPU driver issue. Reboot, press e at the GRUB menu, add nomodeset to the end of the linux line, then press Ctrl+X to boot. Once in the system, install the correct GPU drivers.