📄 Viewing rendered HTML — download raw .md

archLinuxWorkstation-2026

ArchLinux Workstation Installation, 2026

From thumb drive boot

  1. cat /sys/firmware/efi/fw_platform_size to check BIOS vs. EUFI boot.
    If not what you expect then reboot and change settings in BIOS setup. If UEFI:
    1. zgrep CONFIG_EFI /proc/config.gz
    2. ls -l /sys/firmware/efi/efivars
    3. efivars -l
  2. grep -m1 vendor_id /proc/cpuinfo to see which microcode package to install later on.
  3. pacman --noconfirm -S reflector
  4. reflector --country US --protocol https --latest 20 --sort rate --save /etc/pacman.d/mirrorlist
  5. pacman --noconfirm -S parted
  6. timedatectl to ensure system clock is synchronized
  7. Partition disks.
    1. For BIOS booting you need a 1 MiB bios_grub parition
    2. FOR UEFI make a 512 MiB parition of type EF00 / “EFI System”; mkfs.fat -F 32 /dev/sdx1
    3. Be kind to yourself and just go with ext4.

      Label when you format: mkfs.ext4 -L LBL /dev/sdx8
  8. Mount new root to /mnt and if you have a separate boot partition or efi partition
    1. mkdir /mnt/boot && mount /dev/sdx1 /mnt/boot
    2. mkdir -p /mnt/boot/efi && mount -t vfat /dev/sdx1 /mnt/boot/efi
  9. If the following pacstrap fails with GPG errors, then update keyring: pacman-key --refresh-keys
  10. Install essential packages. pacstrap -K /mnt ... with following packages
  11. genfstab -L /mnt >> /mnt/etc/fstab Leverage e2label.

chroot environment

  1. arch-chroot /mnt
  2. ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime
  3. hwclock --systohc
  4. vim /etc/locale.gen. Uncomment these 3: en_US.UTF-8, de_AT.UTF-8, pl_PL.UTF-8
  5. locale-gen
  6. localectl set-locale en_US.UTF-8 # Verify that adds LANG=that to /etc/locale.conf
  7. echo newname > /etc/hostname
  8. passwd
  9. systemctl enable NetworkManager
  10. systemctl mask tmp.mount
  11. grub-install --target=i386-pc --recheck /dev/sdx8 FOR BIOS

    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB FOR UEFI
  12. grub-mkconfig -o /boot/grub/grub.cfg

Non-graphical boot

Bolded keywords represent user-specific values.
N.b. due to markdown limitation I had to doublequote command examples containing bold.

  1. EDITOR=vim visudo Enable the wheel NOPASSWD line.
  2. groupadd -g **userint** **username**
  3. “useradd -g username -u userint -G wheel -c ‘Full Name’ -m username”
  4. “passwd username”
  5. Log in as username and mkdir -p tmp/aur.d && cd tmp/aur.d
  6. git clone https://aur.archlinux.org/yay.git
  7. cd yay && makepg -noconfirm -sirc
  8. Back to a root prompt
  9. pacman -Sy --needed plasma sddm kde-applications
  10. Log in as regular user again.
  11. /usr/lib/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland to test X
  12. Back to root
  13. sddm
  14. sudo systemctl enable sddm

Graphical boot

  1. Log in as username
  2. Use yay to install KDE apps like konsole. Don’t install flatpak.
  3. Populate /etc/skel/ if you have a good source.
  4. Create additional accounts and set the passwords.
  5. Merge in shell-init files and migrating content for root, username, and other special accounts.
  6. KDE Setup
    1. Konsole setup
      1. Add to Panel
      2. Default profile: font +2
      3. Settings: Show tabs when necessary, no menubar by default
    2. KDE Start > System Settings
    3. Panel setup
      1. Add seconds, date, holidays to time widget (RMB when in setup mode)
      2. Add logoff/lock widget
      3. Disable mouse gestures from fucking with windows
      4. Disable touchpad when mouse detected
      5. Set res to desired
      6. Pick a nicer splash screen
    4. Add layouts at Settings > Keyboard: Polish, German
    5. Kill baloo!!!! Voracious file indexer that kills system periodically.
      1. Edit “~/.config/baloofilerc”. Insert at top:
        [Basic Settings] Indexing-Enabled=false
  7. Install console packages. yay --noconfirm -S... with following packages
  8. Optionals
  9. Install npm and node per-user. As a user…
    1. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
    2. nvm install --lts
    3. npm -g in @mermaid-js/mermaid-cli
  10. Install Claude Code / Terminal to ~/.local/bin/. It attempts to add this dir to $PATH but usually fails.
    curl -fsSL https://claude.ai/install.sh | bash
  11. X