/etc is 10–50 MB of mostly text: take the whole directory, not cherry-picked configs:
pacman -Qqe > ~/pkglist.txt # explicitly installed
pacman -Qqm > ~/aur-pkglist.txt # from the AUR
Those two lists make a rebuild an hour, not a weekend. Easy to forget beyond /etc: ~/.config, the shell dotfiles, ~/.ssh, ~/.gnupg, ~/.gitconfig, the bootloader config — /etc/default/grub for GRUB, /boot/loader/ for systemd-boot, outside /etc.
One Borg run covering system, user config and package state:
borg create \
--stats \
--compression zstd,6 \
--exclude '/home/*/.cache' \
--exclude '/home/*/.local/share/Trash' \
::arch-{now:%Y-%m-%d} \
/etc \
/home/$USER/.config \
/home/$USER/.local/share \
/home/$USER/.bashrc \
/home/$USER/.zshrc \
/home/$USER/.profile \
/home/$USER/.ssh \
/home/$USER/.gnupg \
/home/$USER/.gitconfig \
/home/$USER/pkglist.txt \
/home/$USER/aur-pkglist.txt
Preview and retention:
borg create --dry-run ::test /etc
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 --stats
⚠️ Restoring
/etcwholesale onto a fresh install is the mistake: some of it is machine-specific or generated at install time. Diff first, then apply what you want:rsync -a --dry-run etc-backup/ /etc/ diff -ruN etc-backup/ /etc/
pacman -Qkk verifies tracked files against their package — the check for an altered restore.
Which bootloader is in use
archinstall picks by firmware; the bootloader matters when restoring /boot:
| Scenario | Bootloader |
|---|---|
| UEFI (the default path) | systemd-boot |
| BIOS / legacy | GRUB |
| Manual selection | either, or none |
systemd-boot installs to /boot/EFI/systemd/, entries under /boot/loader/entries/arch.conf. Confirm, do not assume:
bootctl status
bootctl reporting systemd-boot information means systemd-boot; if not found, GRUB or a manual setup.