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:
-mcreates/home/kk.-s /bin/bashsets Bash as the login shell.-G wheel,video,renderadds the user tosudoplus 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