Files
dotfiles/arch-install.md
2026-06-24 00:10:05 +02:00

6.9 KiB

Arch install notes

1. Install the base system

These packages are needed before the first boot. Install them with pacstrap after mounting the target system at /mnt and the EFI system partition at /mnt/boot.

base_packages=(
  base       # Minimal Arch system
  linux      # Linux kernel
  linux-firmware
  amd-ucode  # AMD CPU microcode updates loaded by the boot loader
  sudo       # Run commands as root from the user account
  git        # Version control and cloning dotfiles
  which
  base-devel
)

pacstrap -K /mnt "${base_packages[@]}"

Generate fstab, then enter the installed system:

genfstab -U /mnt >>/mnt/etc/fstab
arch-chroot /mnt

From inside the chroot, the scripted version of the remaining setup is:

/path/to/dotfiles/arch-chroot-setup.sh

The sections below show what the script does, following the same order as the Arch install guide: timezone, localization, boot loader, user, networking, packages, then reboot.

2. Configure timezone and localization

Set the timezone to Warsaw and sync the hardware clock:

ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
hwclock --systohc

Enable English and Polish UTF-8 locales:

sed -i 's/^#\(en_US.UTF-8 UTF-8\)/\1/' /etc/locale.gen
sed -i 's/^#\(pl_PL.UTF-8 UTF-8\)/\1/' /etc/locale.gen
locale-gen

Use English as the system language:

cat >/etc/locale.conf <<'EOF'
LANG=en_US.UTF-8
EOF

Use a Polish console keymap:

cat >/etc/vconsole.conf <<'EOF'
KEYMAP=pl2
EOF

3. Configure systemd-boot

These commands run inside arch-chroot /mnt. They assume the EFI system partition is mounted at /boot inside the chroot.

Install systemd-boot:

bootctl install

Configure the loader menu. timeout 0 makes boot faster by hiding the menu unless you hold the boot menu key.

cat >/boot/loader/loader.conf <<'EOF'
default arch.conf
timeout 0
console-mode max
editor no
EOF

Find the root filesystem UUID:

blkid

Create the Arch boot entry. Replace ROOT_UUID_HERE with the UUID of the root partition, not the EFI partition.

cat >/boot/loader/entries/arch.conf <<'EOF'
title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options root=UUID=ROOT_UUID_HERE rw
EOF

Verify the boot loader configuration:

bootctl status

4. Create the user account

Create the normal user and add it to the wheel group so it can use sudo.

useradd -m -s /bin/bash -G wheel,video,render kk
passwd kk

Enable sudo for the wheel group:

EDITOR=vi visudo

Uncomment this line:

%wheel ALL=(ALL:ALL) ALL

Notes:

  • -m creates /home/kk.
  • -s /bin/bash sets Bash as the login shell.
  • -G wheel,video,render adds the user to sudo plus the groups often needed by Sway/GPU access.

5. Enable ethernet networking

Enable systemd-networkd and systemd-resolved:

systemctl enable systemd-networkd.service
systemctl enable systemd-resolved.service
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Use the packaged ethernet DHCP example config:

ln -s /usr/lib/systemd/network/89-ethernet.network.example /etc/systemd/network/89-ethernet.network

This is enough for a normal wired connection using DHCP.

6. Install core tools

These are the day-to-day terminal and development tools.

core_packages=(
  tmux       # Terminal multiplexer
  kakoune    # Text editor
  man-db     # Manual page database
  man-pages  # Linux and POSIX manual pages
  clang      # C/C++ compiler toolchain
  make       # Build automation tool
  tcc        # Tiny C compiler
  ripgrep    # Fast grep replacement, command: rg
  curl       # Download URLs from the command line
  plocate    # Fast file name search database
  fzf        # Fuzzy finder for terminal scripts and navigation
  gdb        # Debugger
)

pacman -Syu --needed "${core_packages[@]}"

Initialize the plocate database:

updatedb

7. Install networking and remote file tools

network_packages=(
  openssh  # SSH client/server tools
  sshfs    # Mount remote machines over SSH
)

pacman -S --needed "${network_packages[@]}"

8. Install the Sway desktop

desktop_packages=(
  sway                    # Wayland window manager
  swayidle                # Idle actions like lock, suspend, hibernate
  swaybg                  # Wallpaper setter for Sway
  swaylock                # Screen locker for Sway/Wayland
  foot                    # Wayland terminal emulator
  wmenu                   # Lightweight Wayland launcher/menu
  xorg-xwayland           # Run X11 applications inside Wayland
  wl-clipboard            # wl-copy and wl-paste clipboard tools
  xdg-desktop-portal-wlr  # Portal backend for screen sharing and app integration
  xdg-user-dirs           # Standard folders like Downloads, Documents, Pictures
  grim                    # Wayland screenshot tool
)

pacman -S --needed "${desktop_packages[@]}"

9. Install audio and media tools

media_packages=(
  pipewire        # Modern Linux audio/media server
  pipewire-pulse  # PulseAudio compatibility for PipeWire
  pipewire-alsa   # ALSA compatibility for PipeWire
  pipewire-jack   # JACK compatibility for PipeWire
  wireplumber     # PipeWire session and policy manager
  pavucontrol     # Graphical volume mixer
  ffmpeg          # Video/audio codecs and conversion tools
  imv             # Image viewer
  mpv             # Video/audio player
)

pacman -S --needed "${media_packages[@]}"

10. Install fonts

font_packages=(
  ttf-fira-code     # Monospace programming font with ligatures
  noto-fonts        # Broad Unicode font coverage
  noto-fonts-cjk    # Chinese, Japanese, and Korean font coverage
  noto-fonts-emoji  # Emoji font support
  noto-fonts-extra  # Extra Noto font families
  ttf-liberation    # Microsoft-compatible replacement fonts
  ttf-dejavu        # General purpose readable fonts
  ttf-roboto        # Roboto font family
)

pacman -S --needed "${font_packages[@]}"

11. Install browser and extra tools

app_packages=(
  firefox   # Web browser
)

pacman -S --needed "${app_packages[@]}"

Install opencode separately if it is available from an AUR helper or a custom repository on the installed system.

12. Install NVIDIA driver

Install the open NVIDIA kernel driver for the PC graphics card:

pacman -S --needed nvidia-open

Reboot after leaving the chroot so the driver is loaded on the first real boot.

13. Reboot into the installed system

Exit the chroot, unmount everything, and reboot:

exit
umount -R /mnt
reboot

Log in as kk after rebooting.

14. First login tasks

Create standard user directories:

xdg-user-dirs-update

Enable the PipeWire user services:

systemctl --user enable --now pipewire pipewire-pulse wireplumber

Generate a local SSH key for this machine:

ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519