# 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.
8. `grep -m1 vendor_id /proc/cpuinfo` to see which microcode package to install later on.
8. `pacman --noconfirm -S reflector`
8. `reflector --country US --protocol https --latest 20 --sort rate --save /etc/pacman.d/mirrorlist`
8. `pacman --noconfirm -S parted`
8. `timedatectl`  to ensure system clock is synchronized
8. Partition disks.  
    1. For BIOS booting you need a 1 MiB bios_grub parition
    8. Be kind to yourself and just go with ext4.
Label when you format: `mkfs.ext4 -L LBL /dev/sdx8`  (Use `-b 4096` to force for SDDs)
8. Mount new root to `/mnt` and if you have a separate boot partition, mount to `/mnt/boot`.
8. If the following `pacstrap` fails with GPG errors, then update keyring:  `pacman-key --refresh-keys`
8. Install essential packages.  `pacstrap -K /mnt ...` with following packages
    * base
    * linux 
    * linux-firmware 
    * {intel|amd}-ucode 
    * git 
    * parted 
    * vim 
    * grub 
    * networkmanager 
    * base-devel`
    * inetutils
    * bind
    * openssh
    * diffutils
    * rsync
    * diffutils
    * hwinfo
    * dmidecode
    * usbutils
8. `genfstab -L /mnt >> /mnt/etc/fstab`  Leverage `e2label`.

## chroot environment
1. `arch-chroot /mnt`
8. `ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime`
8. `hwclock --systohc`
8. `vim /etc/locale.gen`.  Uncomment at least en_US.UTF-8`
8. `locale-gen`
8. `echo LANG=en_US.UTF-8 > /etc/locale.conf`
8. `echo newname > /etc/hostname`
8. `passwd`
8. `systemctl enable NetworkManager`
8. `systemctl mask tmp.mount`
8. `grub-install --target=i386-pc --recheck /dev/sdx8`
8. `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.
8. "groupadd -g **userint** **username**"
8. "useradd -g **username** -u **userint** -G wheel -c 'Full Name' -m **username**"
8. "passwd **username**"
8. Log in as **username** and `mkdir -p tmp/aur.d && cd tmp/aur.d`
8. `git clone https://aur.archlinux.org/yay.git`
8. `cd yay && makepg -noconfirm -sirc`
8. Back to a root prompt
8. `pacman -S --needed plasma sddm kde-applications`
8. Log in as regular user again.
8. `/usr/lib/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland` to test X
8. Back to root
8. `sddm`
8. `sudo systemctl enable sddm`

## Graphical boot
0. Log in as **username**
8. Use `yay` to install KDE apps like `konsole`.  Don't install `flatpak`.
8. Populate `/etc/skel/` if you have a good source.
8. Create additional accounts and set the passwords.
8. Merge in shell-init files and migrating content for root, **username**, and other special accounts.
8. KDE Setup
    1. Konsole setup
        1. Add to Panel
        8. Default profile:  font +2
        8. Settings:  Show tabs when necessary, no menubar by default
    8. KDE Start > System Settings
    8. Panel setup
        1. Add seconds, date, holidays to time widget (RMB when in setup mode)
        8. Add logoff/lock widget
        8. Disable mouse gestures from fucking with windows
        8. Disable touchpad when mouse detected
        8. Set res to desired
        8. Pick a nicer splash screen
    8. Kill baloo!!!!  Voracious file indexer that kills system periodically.
        1. Edit "~/.config/baloofilerc".  Insert at top:
            ```
            [Basic Settings]
            Indexing-Enabled=false
            ```
8. Install console packages.  `yay --noconfirm -S...` with following packages
    * htop
    * genius
    * aws-cli-v2
    * pandoc
    * jq
    * traceroute
    * smartmontools [don't need for virtualized disk space]
    * zip
    * unzip
    * p7zip
    * pkgfile
    * gnu-netcat
    * nuttcp
    * lsof
    * hdparm
    * imagemagick
    * s-nail
    * man-db
    * man-pages
    * whois
    * mlocate
    * tmux
    * expect
    * git-htmldocs
    * zerofree
    * expac
    * hunspell-en_us
8. Optionals
    * ffmpeg
    * mp3wrap
    * gpac
    * AUR: powershell   Very long-running install fails with 51 test failures as of 2024-01-28
    * AUR: speed-test   Runtime not working in mid/late 2023
    * nfs-utils  for NFS client
    * sysstat
    * AUR: downgrade
    * xfsprogs  (if need XFS file system)
    * ntfs-3g   (if need to mount NTFS)
8. Install `npm` and `node` per-user.  As a user...
    1. `curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash`
    8. `nvm install --lts`
    8. `npm -g in @mermaid-js/mermaid-cli`
8. 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`
8. X
    * wl-clipboard
    * spectacle
    * xclip
    * alsa-utils
    * gvim
    * vlc
    * gimp
    * audacity
    * inkscape
    * xterm
    * brave-bin
    * youtube-dl
    * freerdp
