#!/bin/bash # ABOUTME: Post-Install-Script für Moonarch — installiert Pakete, Defaults und konfiguriert das System. # ABOUTME: Wird nach der archinstall-Basisinstallation als normaler User ausgeführt. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" OFFICIAL_PACKAGES="$PROJECT_DIR/packages/official.txt" AUR_PACKAGES="$PROJECT_DIR/packages/aur.txt" DEFAULTS_DIR="$PROJECT_DIR/defaults" # --- Hilfsfunktionen --- log() { echo -e "\e[1;34m[Moonarch]\e[0m $*" } err() { echo -e "\e[1;31m[Moonarch FEHLER]\e[0m $*" >&2 } read_packages() { grep -v '^\s*#' "$1" | grep -v '^\s*$' } # --- Voraussetzungen prüfen --- if [[ $EUID -eq 0 ]]; then err "Bitte NICHT als root ausführen. Das Script nutzt sudo wo nötig." exit 1 fi if ! command -v pacman &>/dev/null; then err "pacman nicht gefunden — ist das wirklich Arch Linux?" exit 1 fi # --- Offizielle Pakete installieren --- log "Installiere offizielle Pakete..." if [[ -f "$OFFICIAL_PACKAGES" ]]; then # shellcheck disable=SC2046 sudo pacman -S --needed --noconfirm $(read_packages "$OFFICIAL_PACKAGES") else err "Paketliste nicht gefunden: $OFFICIAL_PACKAGES" exit 1 fi # --- paru installieren (AUR Helper) --- if ! command -v paru &>/dev/null; then log "Installiere paru..." PARU_TMPDIR=$(mktemp -d) git clone https://aur.archlinux.org/paru.git "$PARU_TMPDIR/paru" (cd "$PARU_TMPDIR/paru" && makepkg -si --noconfirm) rm -rf "$PARU_TMPDIR" else log "paru bereits installiert." fi # --- AUR-Pakete installieren --- log "Installiere AUR-Pakete..." if [[ -f "$AUR_PACKAGES" ]]; then # shellcheck disable=SC2046 paru -S --needed --noconfirm $(read_packages "$AUR_PACKAGES") else err "AUR-Paketliste nicht gefunden: $AUR_PACKAGES" exit 1 fi # --- Themes installieren (Cursor etc.) --- log "Installiere Themes..." "$SCRIPT_DIR/install-themes.sh" # --- XDG Defaults installieren --- log "Installiere XDG-Defaults nach /etc/xdg/..." sudo cp -r "$DEFAULTS_DIR/xdg/"* /etc/xdg/ # Sicherstellen dass Rofi-Scripts ausführbar sind sudo find /etc/xdg/rofi -name "*.sh" -exec chmod +x {} \; # --- Helper-Scripts installieren --- log "Installiere Moonarch Helper-Scripts nach /usr/local/bin/..." sudo install -m 755 "$DEFAULTS_DIR/bin/moonarch-"* /usr/local/bin/ # --- Zsh-Konfiguration --- log "Installiere Zsh-Default-Config..." sudo cp "$DEFAULTS_DIR/shell/zshrc" /etc/zsh/zshrc.moonarch # Eintrag in /etc/zsh/zshrc damit Moonarch-Defaults geladen werden, # sofern der User keine eigene ~/.zshrc hat if ! grep -q "zshrc.moonarch" /etc/zsh/zshrc 2>/dev/null; then echo '# Moonarch defaults (wird durch ~/.zshrc überschrieben)' | sudo tee -a /etc/zsh/zshrc > /dev/null echo '[[ ! -f "$HOME/.zshrc" ]] && source /etc/zsh/zshrc.moonarch' | sudo tee -a /etc/zsh/zshrc > /dev/null fi # Falls der User noch keine .zshrc hat, Moonarch-Default verlinken if [[ ! -f "$HOME/.zshrc" ]]; then log "Keine ~/.zshrc gefunden — sourcing Moonarch-Defaults." mkdir -p "$HOME/.zshrc.d" echo "# Moonarch-Defaults laden, eigene Overrides in ~/.zshrc.d/ oder hier unten" > "$HOME/.zshrc" echo "source /etc/zsh/zshrc.moonarch" >> "$HOME/.zshrc" fi # --- greetd / regreet Konfiguration --- log "Konfiguriere greetd + regreet..." sudo mkdir -p /etc/greetd sudo cp "$DEFAULTS_DIR/etc/greetd/config.toml" /etc/greetd/config.toml sudo cp "$DEFAULTS_DIR/etc/greetd/niri-greeter.kdl" /etc/greetd/niri-greeter.kdl sudo cp "$DEFAULTS_DIR/etc/greetd/regreet.toml" /etc/greetd/regreet.toml sudo cp "$DEFAULTS_DIR/etc/greetd/regreet.css" /etc/greetd/regreet.css # Greeter-Wallpaper installieren log "Installiere Greeter-Wallpaper..." sudo mkdir -p /usr/share/backgrounds sudo cp "$DEFAULTS_DIR/backgrounds/moonarch-greeter.jpg" /usr/share/backgrounds/moonarch-greeter.jpg # --- Systemd-Services aktivieren --- log "Aktiviere Services..." SERVICES=( "NetworkManager" "bluetooth" "docker" "greetd" "systemd-timesyncd" "ufw" "auto-cpufreq" ) for service in "${SERVICES[@]}"; do if systemctl list-unit-files "${service}.service" &>/dev/null; then sudo systemctl enable "$service" log " + $service" else log " ~ $service nicht gefunden, uebersprungen." fi done # --- Shell auf zsh setzen --- if [[ "$SHELL" != */zsh ]]; then log "Setze Standard-Shell auf zsh..." chsh -s "$(which zsh)" fi # --- Firewall aktivieren --- log "Konfiguriere UFW..." sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw --force enable # --- Docker-Gruppe --- if ! groups | grep -q docker; then log "Fuege User zur docker-Gruppe hinzu..." sudo usermod -aG docker "$USER" fi # --- Screenshots-Verzeichnis --- mkdir -p "$HOME/Pictures/Screenshots" mkdir -p "$HOME/Pictures/Wallpaper" # --- moonarch-update Symlink --- log "Erstelle moonarch-update Kommando..." sudo ln -sf "$PROJECT_DIR/scripts/update.sh" /usr/local/bin/moonarch-update # --- Fertig --- log "" log "============================================" log " Moonarch Installation abgeschlossen!" log "============================================" log "" log "Naechste Schritte:" log " 1. Reboot" log " 2. Wallpaper in ~/Pictures/Wallpaper/ ablegen" log " 3. rustup default stable" log " 4. User-Overrides in ~/.config/ oder ~/.zshrc.d/" log ""