#!/usr/bin/env bash # Stage 40 — enable system services, user services and groups. source "$(dirname "${BASH_SOURCE[0]}")/lib.sh" log "Services & system integration" require_arch require_not_root require_sudo enable_system() { local unit="$1" if ! systemctl list-unit-files --no-legend | grep -q "^${unit}"; then skip "$unit not present" return 0 fi if systemctl is-enabled --quiet "$unit" 2>/dev/null; then skip "$unit already enabled" else step "enabling $unit" run sudo systemctl enable --now "$unit" fi } enable_user() { local unit="$1" if ! systemctl --user list-unit-files | grep -q "^${unit}"; then skip "user unit $unit not present" return 0 fi if systemctl --user is-enabled --quiet "$unit" 2>/dev/null; then skip "user unit $unit already enabled" else step "enabling user unit $unit" run systemctl --user enable "$unit" fi } # --- system services ------------------------------------------------------- enable_system NetworkManager.service enable_system bluetooth.service enable_system systemd-timesyncd.service # --- user services --------------------------------------------------------- # pipewire is socket-activated; enabling the sockets is enough. enable_user pipewire.socket enable_user pipewire-pulse.socket enable_user wireplumber.service # --- betterlockscreen on suspend ------------------------------------------ # xss-lock (started from the i3 config) already handles lid-close and suspend. # The systemd unit below is the belt-and-braces version for logind-initiated # sleeps that happen outside the X session. if have betterlockscreen; then step "installing betterlockscreen@.service hook" if [[ "$DRY_RUN" != "1" ]]; then sudo tee /etc/systemd/system/betterlockscreen@.service >/dev/null </dev/null && ! id -nG "$USER" | tr ' ' '\n' | grep -qx "$grp"; then step "adding $USER to group '$grp'" run sudo usermod -aG "$grp" "$USER" fi done # --- font cache ------------------------------------------------------------ step "rebuilding the font cache" run fc-cache -f >/dev/null if fc-list | grep -qi 'inconsolata.*nerd'; then ok "Inconsolata Nerd Font is available to X clients" else warn "Inconsolata Nerd Font not found by fontconfig — check that ttf-inconsolata-nerd installed" fi # --- lock screen cache ----------------------------------------------------- if have betterlockscreen; then wall="$(cat "${XDG_STATE_HOME:-$HOME/.local/state}/current-wallpaper" 2>/dev/null || true)" [[ -z "$wall" ]] && wall="$(find "$WALLPAPER_DIR" -maxdepth 1 -type f 2>/dev/null | sort | head -n1 || true)" if [[ -n "$wall" && -f "$wall" ]]; then step "building the betterlockscreen image cache (this takes a moment)" run betterlockscreen --update "$wall" --blur 0.5 >/dev/null 2>&1 \ || warn "betterlockscreen cache build failed; run 'betterlockscreen -u ' by hand" else skip "no wallpaper available yet — run 'betterlockscreen -u ' after first login" fi fi ok "services configured"