aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--README.md15
-rwxr-xr-xbootstrap.sh49
2 files changed, 54 insertions, 10 deletions
diff --git a/README.md b/README.md
index af8264c..8ae2b57 100644
--- a/README.md
+++ b/README.md
@@ -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'