generate auto install arch script and readme
This commit is contained in:
305
arch-install.md
Normal file
305
arch-install.md
Normal file
@@ -0,0 +1,305 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user