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

308 lines
6.9 KiB
Markdown

# 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`.
```sh
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:
```sh
genfstab -U /mnt >>/mnt/etc/fstab
arch-chroot /mnt
```
From inside the chroot, the scripted version of the remaining setup is:
```sh
/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:
```sh
ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
hwclock --systohc
```
Enable English and Polish UTF-8 locales:
```sh
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:
```sh
cat >/etc/locale.conf <<'EOF'
LANG=en_US.UTF-8
EOF
```
Use a Polish console keymap:
```sh
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:
```sh
bootctl install
```
Configure the loader menu. `timeout 0` makes boot faster by hiding the menu unless you hold the boot menu key.
```sh
cat >/boot/loader/loader.conf <<'EOF'
default arch.conf
timeout 0
console-mode max
editor no
EOF
```
Find the root filesystem UUID:
```sh
blkid
```
Create the Arch boot entry. Replace `ROOT_UUID_HERE` with the UUID of the root partition, not the EFI partition.
```sh
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:
```sh
bootctl status
```
## 4. Create the user account
Create the normal user and add it to the `wheel` group so it can use `sudo`.
```sh
useradd -m -s /bin/bash -G wheel,video,render kk
passwd kk
```
Enable `sudo` for the `wheel` group:
```sh
EDITOR=vi visudo
```
Uncomment this line:
```sudoers
%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`:
```sh
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:
```sh
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.
```sh
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:
```sh
updatedb
```
## 7. Install networking and remote file tools
```sh
network_packages=(
openssh # SSH client/server tools
sshfs # Mount remote machines over SSH
)
pacman -S --needed "${network_packages[@]}"
```
## 8. Install the Sway desktop
```sh
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
```sh
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
```sh
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
```sh
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:
```sh
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:
```sh
exit
umount -R /mnt
reboot
```
Log in as `kk` after rebooting.
## 14. First login tasks
Create standard user directories:
```sh
xdg-user-dirs-update
```
Enable the PipeWire user services:
```sh
systemctl --user enable --now pipewire pipewire-pulse wireplumber
```
Generate a local SSH key for this machine:
```sh
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
```