#!/bin/bash # services.sh - Configure Essential System Tools and OpenRC # Run this inside the chroot after emerging @world # --- Colors for Output --- RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' set -e echo -e "${YELLOW}--- Configuring Essential System Tools and OpenRC ---${NC}" # --- Part 1: Emerge Essential Service Packages --- echo -e "${YELLOW}Emerging essential service packages...${NC}" PACKAGES_TO_EMERGE=( app-admin/sysklogd net-misc/networkmanager net-misc/chrony net-wireless/bluez net-wireless/blueman sys-fs/udisks sys-process/cronie sys-power/power-profiles-daemon sys-auth/rtkit gui-libs/greetd gui-apps/regreet gui-libs/display-manager-init net-firewall/iptables app-backup/snapper app-containers/podman app-containers/podman-compose app-containers/podman-tui ) if ! emerge --ask --verbose "${PACKAGES_TO_EMERGE[@]}"; then echo -e "${RED}Error: Failed to emerge essential service packages.${NC}" exit 1 fi echo -e "${GREEN}Essential service packages emerged successfully.${NC}" # --- Part 2: Configure greetd as Display Manager --- echo -e "${YELLOW}Configuring greetd as display manager...${NC}" # Set greetd in display-manager config if [ -f /etc/conf.d/display-manager ]; then sed -i 's/^DISPLAYMANAGER=.*/DISPLAYMANAGER="greetd"/' /etc/conf.d/display-manager echo -e "${GREEN}Set greetd as display manager${NC}" else echo -e "${YELLOW}Creating /etc/conf.d/display-manager...${NC}" echo 'DISPLAYMANAGER="greetd"' > /etc/conf.d/display-manager echo -e "${GREEN}Created display-manager config with greetd${NC}" fi # Configure greetd - copy config files from repo # NOTE: Run this script from the repo root directory echo -e "${YELLOW}Configuring greetd...${NC}" cp greetd/config.toml /etc/greetd/config.toml cp greetd/regreet.toml /etc/greetd/regreet.toml cp greetd/hyprland.conf /etc/greetd/hyprland.conf cp greetd/greetd.pam /etc/pam.d/greetd # Create greeter log file with correct permissions touch /var/log/hyprland-greeter.log chown greetd:greetd /var/log/hyprland-greeter.log # Install user session launcher script cp greetd/start-hyprland-dbus /usr/local/bin/start-hyprland-dbus chmod +x /usr/local/bin/start-hyprland-dbus # Update Hyprland desktop entry to use our launcher if [ -f /usr/share/wayland-sessions/hyprland.desktop ]; then sed -i 's|^Exec=.*|Exec=/usr/local/bin/start-hyprland-dbus|' /usr/share/wayland-sessions/hyprland.desktop fi echo -e "${GREEN}greetd configured${NC}" # --- Part 3: Add Services to OpenRC Runlevels --- echo -e "${YELLOW}Adding services to OpenRC runlevels...${NC}" # NOTE: udisks is D-Bus activated and doesn't need an OpenRC service # NOTE: wpa_supplicant is managed by NetworkManager, not added separately # Boot runlevel - essential services needed early SERVICES_BOOT=( dbus elogind dmcrypt ) # Default runlevel - user services SERVICES_DEFAULT=( sysklogd sshd NetworkManager chronyd cronie power-profiles-daemon display-manager bluetooth iptables ip6tables ) echo -e "${YELLOW}Adding boot runlevel services...${NC}" for service in "${SERVICES_BOOT[@]}"; do echo -e "${YELLOW} Adding ${service} to boot runlevel...${NC}" if ! rc-update add "$service" boot 2>/dev/null; then echo -e "${RED} Warning: Could not add ${service} (may not exist or already added)${NC}" else echo -e "${GREEN} Added ${service} to boot${NC}" fi done echo -e "${YELLOW}Adding default runlevel services...${NC}" for service in "${SERVICES_DEFAULT[@]}"; do echo -e "${YELLOW} Adding ${service} to default runlevel...${NC}" if ! rc-update add "$service" default 2>/dev/null; then echo -e "${RED} Warning: Could not add ${service} (may not exist or already added)${NC}" else echo -e "${GREEN} Added ${service} to default${NC}" fi done echo -e "${GREEN}OpenRC services configured.${NC}" echo -e "${GREEN}--- Services Setup Complete ---${NC}"