306 lines
6.8 KiB
Markdown
306 lines
6.8 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
|
|
)
|
|
|
|
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
|
|
```
|