# 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 ```