diff options
| -rw-r--r-- | README.md | 15 | ||||
| -rwxr-xr-x | bootstrap.sh | 49 |
2 files changed, 54 insertions, 10 deletions
@@ -4,18 +4,25 @@ My Arch Linux configuration, managed with [chezmoi](https://www.chezmoi.io/). ## Bootstrap on a fresh Arch install -On a minimal Arch system (only `base` installed), as the regular wheel -user: +As the regular wheel user (not root), on a minimal Arch system (only +`base` installed): ```sh curl -fsSL https://raw.githubusercontent.com/sommerfelddev/dotfiles/master/bootstrap.sh | sh ``` -This installs prerequisites, enables `%wheel` in sudoers, builds +This installs pacman prerequisites, enables `%wheel` in sudoers, builds `paru-bin` from the AUR, clones this repo to `~/dotfiles`, runs -`just init`, and — on EFI systems missing an Arch boot entry — +`just init`, enables recommended systemd units (fstrim, timesyncd, +resolved, reflector, paccache, pkgstats, acpid, cpupower, iwd, plus tlp +on laptops), refreshes the pacman mirrorlist, creates XDG user +directories, and — on EFI systems missing an Arch boot entry — launches `create-efi`. +The script assumes the Arch installation guide has already been +followed up to the point of creating a wheel-group user and booting +into their session. + ## Setup on an existing system ```sh diff --git a/bootstrap.sh b/bootstrap.sh index 09983f3..c5cbb26 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,11 +1,11 @@ #!/bin/sh # bootstrap.sh — take a fresh minimal Arch install (only the 'base' -# meta-package installed) to the point where `just init` has run and -# the dotfiles are deployed. +# meta-package installed) to the point where `just init` has run, the +# dotfiles are deployed, and recommended services are enabled. # -# Must be executed as the regular (non-root) user that will own the -# system. paru and makepkg refuse to run as root, so we keep everything -# user-side and only escalate for the pacman + sudoers step. +# Prerequisites (from the Arch installation guide): +# - A regular user already exists and is a member of the 'wheel' group. +# - You are logged in as that user (paru/makepkg refuse to run as root). # # Usage: # curl -fsSL https://raw.githubusercontent.com/sommerfelddev/dotfiles/master/bootstrap.sh | sh @@ -17,6 +17,7 @@ set -eu log() { printf '\033[1;34m==>\033[0m %s\n' "$*"; } +warn() { printf '\033[1;33m==>\033[0m %s\n' "$*" >&2; } die() { printf '\033[1;31m==>\033[0m %s\n' "$*" >&2; exit 1; } # 0. refuse root — paru/makepkg won't run as root @@ -69,7 +70,43 @@ cd "$DOTFILES_DIR" log 'running just init' just init -# 6. optional: create an Arch EFI boot entry if none exists +# 6. enable recommended systemd units for daemons that base.txt installs. +# Soft-fail: warn on a single failure but keep going. +log 'enabling system services' +for u in \ + fstrim.timer \ + systemd-timesyncd.service \ + systemd-resolved.service \ + reflector.timer \ + paccache.timer \ + pkgstats.timer \ + acpid.service \ + cpupower.service \ + iwd.service +do + sudo systemctl enable --now "$u" \ + || warn "could not enable $u" +done + +# tlp: laptops only +if ls /sys/class/power_supply/BAT* >/dev/null 2>&1; then + sudo systemctl enable --now tlp.service \ + || warn 'could not enable tlp.service' +fi + +# 7. refresh pacman mirrorlist once via reflector (config deployed by chezmoi) +log 'refreshing pacman mirrorlist via reflector' +sudo reflector @/etc/xdg/reflector/reflector.conf \ + --save /etc/pacman.d/mirrorlist \ + || warn 'reflector failed; keeping existing mirrorlist' + +# 8. create XDG user directories (~/Documents, ~/Downloads, etc.) +if command -v xdg-user-dirs-update >/dev/null 2>&1; then + log 'creating XDG user directories' + xdg-user-dirs-update || warn 'xdg-user-dirs-update failed' +fi + +# 9. optional: create an Arch EFI boot entry if none exists if [ -d /sys/firmware/efi ]; then if ! sudo efibootmgr 2>/dev/null | grep -iq arch; then log 'no Arch Linux EFI boot entry found; launching create-efi' |
