From 0a266510e08287f01db0fd5443915499ad021c2c Mon Sep 17 00:00:00 2001 From: nevaforget Date: Sat, 28 Mar 2026 14:53:23 +0100 Subject: [PATCH] i18n: migrate all German text to English Enforce the repo convention that committed text is English. Translates ABOUTME headers, code comments, log/error messages, shell prompts, and documentation across all files. CLAUDE.md files remain in German per policy. --- .gitignore | 4 +- README.md | 48 ++++----- config/user_configuration.json | 4 +- defaults/bin/moonarch-btnote | 4 +- defaults/bin/moonarch-capsnote | 4 +- defaults/bin/moonarch-waybar-hidpp | 6 +- defaults/etc/greetd/config.toml | 8 +- defaults/etc/greetd/niri-greeter.kdl | 12 +-- defaults/etc/moongreet/moongreet.toml | 4 +- defaults/user/waybar/config | 16 +-- defaults/user/waybar/style.css | 10 +- defaults/xdg/niri/config.kdl | 2 +- packages/aur.txt | 8 +- packages/official.txt | 14 +-- scripts/install-themes.sh | 14 +-- scripts/post-install.sh | 134 +++++++++++++------------- scripts/update.sh | 102 ++++++++++---------- 17 files changed, 197 insertions(+), 197 deletions(-) diff --git a/.gitignore b/.gitignore index 034a576..6e787b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -# ABOUTME: Gitignore für Moonarch. -# ABOUTME: Schließt temporäre Dateien und Build-Artefakte aus. +# ABOUTME: Gitignore for Moonarch. +# ABOUTME: Excludes temporary files and build artifacts. *.pyc __pycache__/ diff --git a/README.md b/README.md index 87ebd20..7002de3 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,49 @@ # Moonarch -Reproduzierbares Arch-Linux-Setup mit Niri (Wayland Compositor), greetd/moongreet, Catppuccin Mocha Theming und durchgehender Automatisierung. +Reproducible Arch Linux setup with Niri (Wayland compositor), greetd/moongreet, Catppuccin Mocha theming and full automation. -## Schnellstart +## Quick Start -### Variante A: Config im Live-System herunterladen +### Option A: Download config in the live system -1. [Arch ISO](https://archlinux.org/download/) auf USB flashen und davon booten -2. Im Live-System: +1. Flash the [Arch ISO](https://archlinux.org/download/) to USB and boot from it +2. In the live system: ```bash curl -O https://gitea.moonarch.de/nevaforget/moonarch/raw/branch/main/config/user_configuration.json archinstall --config user_configuration.json ``` -3. Disk + Kernel interaktiv waehlen, Rest kommt aus der Config +3. Choose disk + kernel interactively, the rest comes from the config -### Variante B: Config auf den USB-Stick legen (Ventoy) +### Option B: Place config on USB stick (Ventoy) -1. [Ventoy](https://www.ventoy.net/) auf USB installieren -2. Arch ISO und `user_configuration.json` auf die Ventoy-Partition kopieren -3. Davon booten, dann: +1. Install [Ventoy](https://www.ventoy.net/) on USB +2. Copy the Arch ISO and `user_configuration.json` to the Ventoy partition +3. Boot from it, then: ```bash archinstall --config /run/media/ventoy/user_configuration.json ``` -### Nach archinstall +### After archinstall -1. Reboot — das Repo liegt bereits in `/opt/moonarch` (via custom-commands) -2. Einloggen, dann: +1. Reboot — the repo is already in `/opt/moonarch` (via custom-commands) +2. Log in, then: ```bash /opt/moonarch/scripts/post-install.sh ``` -3. Nochmal rebooten — fertig +3. Reboot again — done -## Struktur +## Structure ``` -config/ archinstall-Konfiguration -packages/ Paketlisten (official.txt + aur.txt) -scripts/ Post-Install, Update, Theme-Installer +config/ archinstall configuration +packages/ Package lists (official.txt + aur.txt) +scripts/ Post-install, update, theme installer defaults/ - bin/ moonarch-* Helper-Scripts (/usr/local/bin/) - xdg/ XDG-Defaults (/etc/xdg/) - shell/ Zsh-Konfiguration - etc/ greetd + moongreet Konfiguration - backgrounds/ Default-Wallpaper + bin/ moonarch-* helper scripts (/usr/local/bin/) + xdg/ XDG defaults (/etc/xdg/) + shell/ Zsh configuration + etc/ greetd + moongreet configuration + backgrounds/ Default wallpaper ``` ## Update @@ -52,7 +52,7 @@ defaults/ moonarch-update ``` -Aktualisiert Repo, Systempakete, fehlende Pakete und Defaults — alles interaktiv mit Bestaetigungen. +Updates repo, system packages, missing packages and defaults — all interactive with confirmations. ## Stack diff --git a/config/user_configuration.json b/config/user_configuration.json index 5e9a40b..18f680f 100644 --- a/config/user_configuration.json +++ b/config/user_configuration.json @@ -1,6 +1,6 @@ { - "__comment": "ABOUTME: archinstall-Konfiguration für Moonarch.", - "__comment2": "ABOUTME: Basis-Setup — Kernel, Disk und Filesystem werden interaktiv gewählt.", + "__comment": "ABOUTME: archinstall configuration for Moonarch.", + "__comment2": "ABOUTME: Base setup — kernel, disk and filesystem are chosen interactively.", "audio_config": { "audio": "pipewire" diff --git a/defaults/bin/moonarch-btnote b/defaults/bin/moonarch-btnote index 5f85a3f..2361f67 100755 --- a/defaults/bin/moonarch-btnote +++ b/defaults/bin/moonarch-btnote @@ -1,6 +1,6 @@ #!/bin/bash -# ABOUTME: Prüft Bluetooth-Geräte auf niedrigen Akkustand und sendet Notification. -# ABOUTME: Kann per Timer oder Cron regelmäßig ausgeführt werden. +# ABOUTME: Checks Bluetooth devices for low battery and sends a notification. +# ABOUTME: Can be run periodically via timer or cron. NOTIFY_AT_PERCENTAGE=70 ICON="/usr/share/icons/Newaita-reborn/status/symbolic/battery-empty-symbolic.svg" diff --git a/defaults/bin/moonarch-capsnote b/defaults/bin/moonarch-capsnote index 1bfc2fd..1cbc587 100755 --- a/defaults/bin/moonarch-capsnote +++ b/defaults/bin/moonarch-capsnote @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# ABOUTME: Zeigt eine Notification beim Umschalten von Caps Lock an. -# ABOUTME: Gedacht für Keybinding oder Input-Event-Trigger. +# ABOUTME: Shows a notification when toggling Caps Lock. +# ABOUTME: Intended for keybinding or input event triggers. sleep 0.2 diff --git a/defaults/bin/moonarch-waybar-hidpp b/defaults/bin/moonarch-waybar-hidpp index 87a05fb..108b161 100755 --- a/defaults/bin/moonarch-waybar-hidpp +++ b/defaults/bin/moonarch-waybar-hidpp @@ -1,6 +1,6 @@ #!/usr/bin/bash -# ABOUTME: Waybar-Modul das den Batteriestatus eines HID++ Geräts als JSON ausgibt. -# ABOUTME: Findet den richtigen hidpp_battery_* Eintrag dynamisch per MODEL_NAME (Argument). +# ABOUTME: Waybar module that outputs HID++ device battery status as JSON. +# ABOUTME: Finds the correct hidpp_battery_* entry dynamically by MODEL_NAME (argument). if [ -z "$1" ]; then echo "Usage: moonarch-waybar-hidpp " >&2 @@ -45,4 +45,4 @@ for dev in /sys/class/power_supply/hidpp_battery_*; do fi done -# Gerät nicht gefunden — keine Ausgabe, Waybar versteckt das Modul +# Device not found — no output, Waybar hides the module diff --git a/defaults/etc/greetd/config.toml b/defaults/etc/greetd/config.toml index 32c683f..99ab8ae 100644 --- a/defaults/etc/greetd/config.toml +++ b/defaults/etc/greetd/config.toml @@ -1,11 +1,11 @@ -# ABOUTME: greetd-Konfiguration fuer Moonarch. -# ABOUTME: Startet Niri als Compositor fuer den Moongreet-Greeter. +# ABOUTME: greetd configuration for Moonarch. +# ABOUTME: Starts Niri as Wayland compositor for the Moongreet greeter. [terminal] vt = 1 [default_session] -# Moongreet braucht einen Wayland-Compositor — niri stellt diesen bereit. -# Siehe niri-greeter.kdl fuer die Compositor-Konfiguration. +# Moongreet needs a Wayland compositor — Niri provides it. +# See niri-greeter.kdl for the compositor configuration. command = "niri -c /etc/greetd/niri-greeter.kdl" user = "greeter" diff --git a/defaults/etc/greetd/niri-greeter.kdl b/defaults/etc/greetd/niri-greeter.kdl index 961e13b..fa8b9c9 100644 --- a/defaults/etc/greetd/niri-greeter.kdl +++ b/defaults/etc/greetd/niri-greeter.kdl @@ -1,5 +1,5 @@ -// ABOUTME: Niri-Konfiguration fuer den Moongreet Login-Greeter. -// ABOUTME: Wird von greetd gestartet — minimale Config ohne Keybinds fuer Sicherheit. +// ABOUTME: Niri configuration for the Moongreet login greeter. +// ABOUTME: Started by greetd — minimal config without keybinds for security. input { keyboard { @@ -35,11 +35,11 @@ layout { } } -// Moongreet starten und niri beenden, sobald moongreet sich schliesst. -// Retry-Loop stellt sicher, dass niri auch bei fruehen Crashes von moongreet beendet wird. +// Start moongreet and quit niri once moongreet exits. +// Retry loop ensures niri shuts down even on early moongreet crashes. spawn-sh-at-startup "moongreet; while ! niri msg action quit --skip-confirmation 2>/dev/null; do sleep 0.5; done" -// Greeter-Fenster maximiert darstellen +// Maximize greeter window window-rule { open-maximized true } @@ -55,5 +55,5 @@ animations { } binds { - // Keine Keybinds — verhindert Zugriff auf Terminals oder andere Aktionen + // No keybinds — prevents access to terminals or other actions } diff --git a/defaults/etc/moongreet/moongreet.toml b/defaults/etc/moongreet/moongreet.toml index caac283..a1dd06a 100644 --- a/defaults/etc/moongreet/moongreet.toml +++ b/defaults/etc/moongreet/moongreet.toml @@ -1,5 +1,5 @@ -# ABOUTME: Moongreet-Konfiguration fuer Moonarch. -# ABOUTME: Definiert Aussehen und Verhalten des Login-Greeters. +# ABOUTME: Moongreet configuration for Moonarch. +# ABOUTME: Defines appearance and behavior of the login greeter. [appearance] background = "/usr/share/moonarch/wallpaper.jpg" diff --git a/defaults/user/waybar/config b/defaults/user/waybar/config index 6a75df3..dc6ad3d 100644 --- a/defaults/user/waybar/config +++ b/defaults/user/waybar/config @@ -1,13 +1,13 @@ { - // ABOUTME: User-Override fuer Waybar — erweitert die systemweite Config aus /etc/xdg/waybar/. - // ABOUTME: Eigene Module hier definieren und in modules-left/center/right eintragen. + // ABOUTME: User override for Waybar — extends the system-wide config from /etc/xdg/waybar/. + // ABOUTME: Define custom modules here and add them to modules-left/center/right. - // Systemweite Moonarch-Config als Basis laden. - // Properties die hier definiert werden, ueberschreiben die aus dem Include. + // Load system-wide Moonarch config as base. + // Properties defined here override those from the include. "include": ["/etc/xdg/waybar/config"] - // Beispiel: Modul-Leiste erweitern (muss komplett angegeben werden, da sie die - // systemweite ersetzt): + // Example: extend module bar (must be specified completely as it replaces + // the system-wide one): // // "modules-right": [ // "mpris", @@ -20,8 +20,8 @@ // "group/indicators" // ], - // Beispiel: HID++ Geräte-Akku anzeigen (z.B. Logitech Tastatur) - // moonarch-waybar-hidpp findet den richtigen hidpp_battery_* Eintrag dynamisch + // Example: show HID++ device battery (e.g. Logitech keyboard) + // moonarch-waybar-hidpp finds the correct hidpp_battery_* entry dynamically // // "custom/keyboard": { // "exec": "moonarch-waybar-hidpp 'G515 LS TKL'", diff --git a/defaults/user/waybar/style.css b/defaults/user/waybar/style.css index 2ff5817..afdf68c 100644 --- a/defaults/user/waybar/style.css +++ b/defaults/user/waybar/style.css @@ -1,12 +1,12 @@ -/* ABOUTME: User-Override fuer Waybar-Styling — erweitert die systemweite style.css. */ -/* ABOUTME: Eigene Styles hier definieren, die systemweite Basis wird per @import geladen. */ +/* ABOUTME: User override for Waybar styling — extends the system-wide style.css. */ +/* ABOUTME: Define custom styles here, the system-wide base is loaded via @import. */ @import url("/etc/xdg/waybar/style.css"); -/* Eigene Styles unterhalb eintragen. */ -/* Selektoren aus der systemweiten Config koennen hier ueberschrieben werden. */ +/* Add custom styles below. */ +/* Selectors from the system-wide config can be overridden here. */ -/* Beispiel: Logitech-Tastatur-Akku einfaerben */ +/* Example: color Logitech keyboard battery */ /* #battery-keyboard.warning:not(.charging) { color: #e6a200; diff --git a/defaults/xdg/niri/config.kdl b/defaults/xdg/niri/config.kdl index 6aa03c3..0e2e177 100644 --- a/defaults/xdg/niri/config.kdl +++ b/defaults/xdg/niri/config.kdl @@ -76,7 +76,7 @@ layout { } } -// xwayland-satellite wird seit niri 25.08 automatisch verwaltet +// xwayland-satellite is managed automatically since niri 25.08 spawn-at-startup "waybar" spawn-at-startup "dunst" spawn-at-startup "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1" diff --git a/packages/aur.txt b/packages/aur.txt index 08179e7..4059498 100644 --- a/packages/aur.txt +++ b/packages/aur.txt @@ -1,7 +1,7 @@ -# ABOUTME: Liste der AUR-Pakete, die nach der Basisinstallation via paru installiert werden. -# ABOUTME: Wird von post-install.sh verwendet. +# ABOUTME: List of AUR packages installed via paru after the base installation. +# ABOUTME: Used by post-install.sh. -# AUR Helper (wird zuerst manuell gebaut) +# AUR Helper (built manually first) # paru # Theming @@ -18,7 +18,7 @@ wl-color-picker wlogout gtklock-dpms-module -# Anwendungen +# Applications blueberry waterfox-bin diff --git a/packages/official.txt b/packages/official.txt index 8fa0f48..b49bfe5 100644 --- a/packages/official.txt +++ b/packages/official.txt @@ -1,5 +1,5 @@ -# ABOUTME: Liste der offiziell installierten Pakete aus den Arch-Repos. -# ABOUTME: Wird von archinstall und post-install.sh verwendet. +# ABOUTME: List of official packages from Arch repos. +# ABOUTME: Used by archinstall and post-install.sh. # Base base @@ -26,7 +26,7 @@ jq ripgrep lazygit -# Netzwerk +# Network networkmanager network-manager-applet networkmanager-openvpn @@ -51,7 +51,7 @@ pavucontrol niri xwayland-satellite -# Desktop-Utilities +# Desktop Utilities waybar dunst cliphist @@ -65,7 +65,7 @@ nwg-look greetd polkit-gnome -# Dateimanager / XDG +# File Manager / XDG gvfs gvfs-dnssd gvfs-mtp @@ -79,10 +79,10 @@ qt6-5compat # Themes & Fonts ttf-ubuntusans-nerd -# Anwendungen +# Applications viewnior -# Entwicklung +# Development git glab go diff --git a/scripts/install-themes.sh b/scripts/install-themes.sh index 29d9312..1b24a8d 100755 --- a/scripts/install-themes.sh +++ b/scripts/install-themes.sh @@ -1,6 +1,6 @@ #!/bin/bash -# ABOUTME: Installiert Themes die nicht via Pakete verfügbar sind (Cursor-Theme). -# ABOUTME: Wird von post-install.sh aufgerufen. +# ABOUTME: Installs themes not available via packages (cursor theme). +# ABOUTME: Called by post-install.sh. set -euo pipefail @@ -14,18 +14,18 @@ log() { CURSOR_DEST="/usr/share/icons/Sweet-cursors" if [[ -d "$CURSOR_DEST" ]]; then - log "Sweet-cursors bereits installiert." + log "Sweet-cursors already installed." else - log "Installiere Sweet-cursors..." + log "Installing Sweet-cursors..." TMPDIR=$(mktemp -d) git clone --depth 1 https://github.com/EliverLara/Sweet.git "$TMPDIR/sweet" if [[ -d "$TMPDIR/sweet/kde/cursors/Sweet-cursors" ]]; then sudo cp -r "$TMPDIR/sweet/kde/cursors/Sweet-cursors" "$CURSOR_DEST" - log "Sweet-cursors nach $CURSOR_DEST installiert." + log "Sweet-cursors installed to $CURSOR_DEST." else - echo "Cursor-Verzeichnis nicht gefunden im Repository." >&2 - echo "Bitte manuell installieren: https://github.com/EliverLara/Sweet" >&2 + echo "Cursor directory not found in repository." >&2 + echo "Please install manually: https://github.com/EliverLara/Sweet" >&2 fi rm -rf "$TMPDIR" diff --git a/scripts/post-install.sh b/scripts/post-install.sh index 9efd264..ed48824 100755 --- a/scripts/post-install.sh +++ b/scripts/post-install.sh @@ -1,6 +1,6 @@ #!/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. +# ABOUTME: Post-install script for Moonarch — installs packages, defaults and configures the system. +# ABOUTME: Run as regular user after the archinstall base installation. set -euo pipefail @@ -10,69 +10,69 @@ OFFICIAL_PACKAGES="$PROJECT_DIR/packages/official.txt" AUR_PACKAGES="$PROJECT_DIR/packages/aur.txt" DEFAULTS_DIR="$PROJECT_DIR/defaults" -# --- Hilfsfunktionen --- +# --- Helper functions --- log() { echo -e "\e[1;34m[Moonarch]\e[0m $*" } err() { - echo -e "\e[1;31m[Moonarch FEHLER]\e[0m $*" >&2 + echo -e "\e[1;31m[Moonarch ERROR]\e[0m $*" >&2 } read_packages() { grep -v '^\s*#' "$1" | grep -v '^\s*$' } -# --- Voraussetzungen prüfen --- +# --- Prerequisites --- if [[ $EUID -eq 0 ]]; then - err "Bitte NICHT als root ausführen. Das Script nutzt sudo wo nötig." + err "Do NOT run as root. The script uses sudo where needed." exit 1 fi if ! command -v pacman &>/dev/null; then - err "pacman nicht gefunden — ist das wirklich Arch Linux?" + err "pacman not found — is this really Arch Linux?" exit 1 fi -# --- Offizielle Pakete installieren --- +# --- Install official packages --- -log "Installiere offizielle Pakete..." +log "Installing official packages..." if [[ -f "$OFFICIAL_PACKAGES" ]]; then # shellcheck disable=SC2046 sudo pacman -S --needed --noconfirm $(read_packages "$OFFICIAL_PACKAGES") else - err "Paketliste nicht gefunden: $OFFICIAL_PACKAGES" + err "Package list not found: $OFFICIAL_PACKAGES" exit 1 fi -# --- paru installieren (AUR Helper) --- +# --- Install paru (AUR Helper) --- if ! command -v paru &>/dev/null; then - log "Installiere paru..." + log "Installing 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." + log "paru already installed." fi -# --- AUR-Pakete installieren --- +# --- Install AUR packages --- -log "Installiere AUR-Pakete..." +log "Installing AUR packages..." if [[ -f "$AUR_PACKAGES" ]]; then # shellcheck disable=SC2046 paru -S --needed --noconfirm $(read_packages "$AUR_PACKAGES") else - err "AUR-Paketliste nicht gefunden: $AUR_PACKAGES" + err "AUR package list not found: $AUR_PACKAGES" exit 1 fi -# --- Moonarch custom paru repo einrichten --- +# --- Set up Moonarch custom paru repo --- -log "Richte Moonarch paru-Repo ein..." +log "Setting up Moonarch paru repo..." PARU_CONF="$HOME/.config/paru/paru.conf" mkdir -p "$(dirname "$PARU_CONF")" if ! grep -q '\[moonarch\]' "$PARU_CONF" 2>/dev/null; then @@ -80,102 +80,102 @@ if ! grep -q '\[moonarch\]' "$PARU_CONF" 2>/dev/null; then [moonarch] Url = https://gitea.moonarch.de/nevaforget/moonarch-pkgbuilds.git EOCONF - log " + Moonarch-Repo zu paru.conf hinzugefuegt." + log " + Moonarch repo added to paru.conf." else - log " ~ Moonarch-Repo bereits in paru.conf." + log " ~ Moonarch repo already in paru.conf." fi paru -Sy --pkgbuilds --noconfirm paru -S --needed --noconfirm moonset-git moonlock-git moongreet-git -# --- Themes installieren (Cursor etc.) --- +# --- Install themes (cursor etc.) --- -log "Installiere Themes..." +log "Installing themes..." "$SCRIPT_DIR/install-themes.sh" -# --- XDG Defaults installieren --- +# --- Install XDG defaults --- -log "Installiere XDG-Defaults nach /etc/xdg/..." +log "Installing XDG defaults to /etc/xdg/..." sudo cp -r "$DEFAULTS_DIR/xdg/"* /etc/xdg/ -# Sicherstellen dass Rofi-Scripts ausführbar sind +# Ensure Rofi scripts are executable sudo find /etc/xdg/rofi -name "*.sh" -exec chmod +x {} \; -# --- GTK4 Theme-Symlinks für libadwaita-Apps --- +# --- GTK4 theme symlinks for libadwaita apps --- THEME_NAME="Colloid-Catppuccin" THEME_GTK4="/usr/share/themes/$THEME_NAME/gtk-4.0" GTK4_XDG="/etc/xdg/gtk-4.0" if [[ -d "$THEME_GTK4" ]]; then - log "Erstelle systemweite GTK4-Symlinks für $THEME_NAME..." + log "Creating system-wide GTK4 symlinks for $THEME_NAME..." - # gtk.css zeigt auf gtk-dark.css, damit libadwaita-Apps das Dark-Theme laden + # gtk.css points to gtk-dark.css so libadwaita apps load the dark theme sudo ln -sf "$THEME_GTK4/gtk-dark.css" "$GTK4_XDG/gtk.css" sudo ln -sf "$THEME_GTK4/gtk-dark.css" "$GTK4_XDG/gtk-dark.css" - # Assets-Symlink: erst entfernen falls vorhanden (ln -sf auf Verzeichnisse folgt dem Link) + # Assets symlink: remove first if exists (ln -sf on directories follows the link) sudo rm -f "$GTK4_XDG/assets" sudo ln -s "$THEME_GTK4/assets" "$GTK4_XDG/assets" else - err "GTK4-Theme nicht gefunden: $THEME_GTK4 — libadwaita-Apps nutzen Fallback-Theme." + err "GTK4 theme not found: $THEME_GTK4 — libadwaita apps will use fallback theme." fi -# --- gsettings für GTK-Theme und Dark-Mode --- +# --- gsettings for GTK theme and dark mode --- -log "Setze gsettings für GTK-Theme..." +log "Setting gsettings for GTK theme..." gsettings set org.gnome.desktop.interface gtk-theme "$THEME_NAME" gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' gsettings set org.gnome.desktop.interface icon-theme 'Colloid-Grey-Catppuccin-Dark' gsettings set org.gnome.desktop.interface font-name 'UbuntuSans Nerd Font 11' -# --- Helper-Scripts installieren --- +# --- Install helper scripts --- -log "Installiere Moonarch Helper-Scripts nach /usr/local/bin/..." +log "Installing Moonarch helper scripts to /usr/local/bin/..." sudo install -m 755 "$DEFAULTS_DIR/bin/moonarch-"* /usr/local/bin/ -# --- Zsh-Konfiguration --- +# --- Zsh configuration --- -log "Installiere Zsh-Default-Config..." +log "Installing 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 +# Entry in /etc/zsh/zshrc to load Moonarch defaults +# unless the user has their own ~/.zshrc 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 '# Moonarch defaults (overridden by ~/.zshrc)' | 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 user has no .zshrc yet, link Moonarch defaults if [[ ! -f "$HOME/.zshrc" ]]; then - log "Keine ~/.zshrc gefunden — sourcing Moonarch-Defaults." + log "No ~/.zshrc found — sourcing Moonarch defaults." mkdir -p "$HOME/.zshrc.d" - echo "# Moonarch-Defaults laden, eigene Overrides in ~/.zshrc.d/ oder hier unten" > "$HOME/.zshrc" + echo "# Load Moonarch defaults, add custom overrides in ~/.zshrc.d/ or below" > "$HOME/.zshrc" echo "source /etc/zsh/zshrc.moonarch" >> "$HOME/.zshrc" fi # --- moonlock systemd user service --- -log "Konfiguriere moonlock User-Service..." +log "Configuring moonlock user service..." sudo mkdir -p /etc/systemd/user sudo cp "$DEFAULTS_DIR/etc/systemd/user/moonlock.service" /etc/systemd/user/moonlock.service -# --- greetd / moongreet Konfiguration --- +# --- greetd / moongreet configuration --- -log "Konfiguriere greetd + moongreet..." +log "Configuring greetd + moongreet..." sudo mkdir -p /etc/greetd sudo cp "$DEFAULTS_DIR/etc/greetd/config.toml" /etc/greetd/config.toml sudo mkdir -p /etc/moongreet sudo cp "$DEFAULTS_DIR/etc/moongreet/moongreet.toml" /etc/moongreet/moongreet.toml -# Default-Wallpaper installieren (Greeter, Lockscreen, Desktop) -log "Installiere Default-Wallpaper..." +# Install default wallpaper (greeter, lockscreen, desktop) +log "Installing default wallpaper..." sudo mkdir -p /usr/share/moonarch sudo cp "$DEFAULTS_DIR/backgrounds/wallpaper.jpg" /usr/share/moonarch/wallpaper.jpg -# --- Systemd-Services aktivieren --- +# --- Enable systemd services --- -log "Aktiviere Services..." +log "Enabling services..." SERVICES=( "NetworkManager" "bluetooth" @@ -191,20 +191,20 @@ for service in "${SERVICES[@]}"; do sudo systemctl enable "$service" log " + $service" else - log " ~ $service nicht gefunden, uebersprungen." + log " ~ $service not found, skipped." fi done -# --- Shell auf zsh setzen --- +# --- Set shell to zsh --- if [[ "$SHELL" != */zsh ]]; then - log "Setze Standard-Shell auf zsh..." + log "Setting default shell to zsh..." chsh -s "$(which zsh)" fi -# --- Firewall aktivieren --- +# --- Enable firewall --- -log "Konfiguriere UFW..." +log "Configuring UFW..." sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw --force enable @@ -212,17 +212,17 @@ sudo ufw --force enable # --- Docker-Gruppe --- if ! groups | grep -q docker; then - log "Fuege User zur docker-Gruppe hinzu..." + log "Adding user to docker group..." sudo usermod -aG docker "$USER" fi -# --- User-Config-Defaults installieren --- +# --- Install user config defaults --- -log "Installiere User-Config-Defaults nach ~/.config/..." +log "Installing user config defaults to ~/.config/..." USER_DEFAULTS_DIR="$DEFAULTS_DIR/user" if [[ -d "$USER_DEFAULTS_DIR" ]]; then - # Jedes Unterverzeichnis in defaults/user/ entspricht einem ~/.config/-Verzeichnis. - # Dateien werden nur kopiert wenn sie noch nicht existieren (kein Ueberschreiben). + # Each subdirectory in defaults/user/ corresponds to a ~/.config/ directory. + # Files are only copied if they don't exist yet (no overwriting). for src_dir in "$USER_DEFAULTS_DIR"/*/; do app_name="$(basename "$src_dir")" dest_dir="$HOME/.config/$app_name" @@ -235,32 +235,32 @@ if [[ -d "$USER_DEFAULTS_DIR" ]]; then cp "$src_file" "$dest_file" log " + $app_name/$rel_path" else - log " ~ $app_name/$rel_path existiert bereits, uebersprungen." + log " ~ $app_name/$rel_path already exists, skipped." fi done done fi -# --- Screenshots-Verzeichnis --- +# --- Screenshots directory --- mkdir -p "$HOME/Pictures/Screenshots" mkdir -p "$HOME/Pictures/Wallpaper" # --- moonarch-update Symlink --- -log "Erstelle moonarch-update Kommando..." +log "Creating moonarch-update command..." sudo ln -sf "$PROJECT_DIR/scripts/update.sh" /usr/local/bin/moonarch-update -# --- Fertig --- +# --- Done --- log "" log "============================================" -log " Moonarch Installation abgeschlossen!" +log " Moonarch installation complete!" log "============================================" log "" -log "Naechste Schritte:" +log "Next steps:" log " 1. Reboot" -log " 2. Wallpaper in ~/Pictures/Wallpaper/ ablegen" +log " 2. Place wallpapers in ~/Pictures/Wallpaper/" log " 3. rustup default stable" -log " 4. User-Overrides in ~/.config/ oder ~/.zshrc.d/" +log " 4. User overrides in ~/.config/ or ~/.zshrc.d/" log "" diff --git a/scripts/update.sh b/scripts/update.sh index 9ab5df6..ba749b1 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -1,6 +1,6 @@ #!/bin/bash -# ABOUTME: Moonarch System-Updater — aktualisiert System, Repo und Defaults. -# ABOUTME: Sollte regelmäßig ausgeführt werden um das System synchron zu halten. +# ABOUTME: Moonarch system updater — updates system, repo and defaults. +# ABOUTME: Should be run regularly to keep the system in sync. set -euo pipefail @@ -10,14 +10,14 @@ OFFICIAL_PACKAGES="$PROJECT_DIR/packages/official.txt" AUR_PACKAGES="$PROJECT_DIR/packages/aur.txt" DEFAULTS_DIR="$PROJECT_DIR/defaults" -# --- Hilfsfunktionen --- +# --- Helper functions --- log() { echo -e "\e[1;34m[Moonarch]\e[0m $*" } err() { - echo -e "\e[1;31m[Moonarch FEHLER]\e[0m $*" >&2 + echo -e "\e[1;31m[Moonarch ERROR]\e[0m $*" >&2 } read_packages() { @@ -25,20 +25,20 @@ read_packages() { } confirm() { - read -r -p "$1 [j/N] " response - [[ "$response" =~ ^[jJyY]$ ]] + read -r -p "$1 [y/N] " response + [[ "$response" =~ ^[yY]$ ]] } -# --- Voraussetzungen --- +# --- Prerequisites --- if [[ $EUID -eq 0 ]]; then - err "Bitte NICHT als root ausfuehren." + err "Do NOT run as root." exit 1 fi -# --- 1. Moonarch-Repo aktualisieren --- +# --- 1. Update Moonarch repo --- -log "=== Moonarch Repo aktualisieren ===" +log "=== Update Moonarch repo ===" cd "$PROJECT_DIR" if git rev-parse --is-inside-work-tree &>/dev/null; then @@ -47,75 +47,75 @@ if git rev-parse --is-inside-work-tree &>/dev/null; then REMOTE=$(git rev-parse @{u} 2>/dev/null || echo "$LOCAL") if [[ "$LOCAL" != "$REMOTE" ]]; then - log "Updates verfuegbar." + log "Updates available." git --no-pager log --oneline "$LOCAL".."$REMOTE" echo "" - if confirm "Repo aktualisieren?"; then + if confirm "Update repo?"; then git pull --ff-only - log "Repo aktualisiert." + log "Repo updated." else - log "Repo-Update uebersprungen." + log "Repo update skipped." fi else - log "Repo ist aktuell." + log "Repo is up to date." fi else - log "Kein Git-Repo — Repo-Update uebersprungen." + log "Not a git repo — repo update skipped." fi -# --- 2. System-Pakete aktualisieren --- +# --- 2. Update system packages --- -log "=== System-Pakete aktualisieren ===" +log "=== Update system packages ===" -if confirm "pacman -Syu ausfuehren?"; then +if confirm "Run pacman -Syu?"; then sudo pacman -Syu else - log "System-Update uebersprungen." + log "System update skipped." fi if command -v paru &>/dev/null; then - if confirm "AUR-Pakete aktualisieren (paru -Sua)?"; then + if confirm "Update AUR packages (paru -Sua)?"; then paru -Sua else - log "AUR-Update uebersprungen." + log "AUR update skipped." fi fi -# --- 3. Fehlende Pakete nachinstallieren --- +# --- 3. Install missing packages --- -log "=== Paketlisten abgleichen ===" +log "=== Reconcile package lists ===" if [[ -f "$OFFICIAL_PACKAGES" ]]; then MISSING_OFFICIAL=$(comm -23 <(read_packages "$OFFICIAL_PACKAGES" | sort) <(pacman -Qqe | sort) || true) if [[ -n "$MISSING_OFFICIAL" ]]; then - log "Fehlende offizielle Pakete:" + log "Missing official packages:" echo "$MISSING_OFFICIAL" - if confirm "Installieren?"; then + if confirm "Install?"; then # shellcheck disable=SC2086 sudo pacman -S --needed --noconfirm $MISSING_OFFICIAL fi else - log "Alle offiziellen Pakete installiert." + log "All official packages installed." fi fi if [[ -f "$AUR_PACKAGES" ]] && command -v paru &>/dev/null; then MISSING_AUR=$(comm -23 <(read_packages "$AUR_PACKAGES" | sort) <(pacman -Qqe | sort) || true) if [[ -n "$MISSING_AUR" ]]; then - log "Fehlende AUR-Pakete:" + log "Missing AUR packages:" echo "$MISSING_AUR" - if confirm "Installieren?"; then + if confirm "Install?"; then # shellcheck disable=SC2086 paru -S --needed --noconfirm $MISSING_AUR fi else - log "Alle AUR-Pakete installiert." + log "All AUR packages installed." fi fi -# --- 4. Defaults aktualisieren --- +# --- 4. Update defaults --- -log "=== Defaults aktualisieren ===" +log "=== Update defaults ===" # XDG Defaults CHANGED_XDG=false @@ -124,15 +124,15 @@ if ! diff -rq "$DEFAULTS_DIR/xdg/" /etc/xdg/ --exclude='*.pyc' &>/dev/null 2>&1; fi if $CHANGED_XDG; then - log "XDG-Defaults haben sich geaendert." + log "XDG defaults have changed." diff -rq "$DEFAULTS_DIR/xdg/" /etc/xdg/ --exclude='*.pyc' 2>/dev/null | head -20 || true echo "" - if confirm "XDG-Defaults nach /etc/xdg/ deployen?"; then + if confirm "Deploy XDG defaults to /etc/xdg/?"; then sudo cp -r "$DEFAULTS_DIR/xdg/"* /etc/xdg/ - log "XDG-Defaults aktualisiert." + log "XDG defaults updated." fi else - log "XDG-Defaults sind aktuell." + log "XDG defaults are up to date." fi # Binaries @@ -146,51 +146,51 @@ for bin in "$DEFAULTS_DIR/bin/moonarch-"*; do done if $CHANGED_BIN; then - log "Moonarch-Binaries haben sich geaendert." + log "Moonarch binaries have changed." for bin in "$DEFAULTS_DIR/bin/moonarch-"*; do name=$(basename "$bin") if ! cmp -s "$bin" "/usr/local/bin/$name" 2>/dev/null; then log " ~ $name" fi done - if confirm "Binaries nach /usr/local/bin/ deployen?"; then + if confirm "Deploy binaries to /usr/local/bin/?"; then sudo install -m 755 "$DEFAULTS_DIR/bin/moonarch-"* /usr/local/bin/ - log "Binaries aktualisiert." + log "Binaries updated." fi else - log "Binaries sind aktuell." + log "Binaries are up to date." fi # Zsh if ! cmp -s "$DEFAULTS_DIR/shell/zshrc" /etc/zsh/zshrc.moonarch 2>/dev/null; then - log "Zsh-Defaults haben sich geaendert." - if confirm "Zsh-Defaults aktualisieren?"; then + log "Zsh defaults have changed." + if confirm "Update Zsh defaults?"; then sudo cp "$DEFAULTS_DIR/shell/zshrc" /etc/zsh/zshrc.moonarch - log "Zsh-Defaults aktualisiert." + log "Zsh defaults updated." fi else - log "Zsh-Defaults sind aktuell." + log "Zsh defaults are up to date." fi -# --- 5. Verwaiste Pakete --- +# --- 5. Orphaned packages --- -log "=== Verwaiste Pakete ===" +log "=== Orphaned packages ===" ORPHANS=$(pacman -Qdtq 2>/dev/null || true) if [[ -n "$ORPHANS" ]]; then - log "Verwaiste Pakete gefunden:" + log "Orphaned packages found:" echo "$ORPHANS" - if confirm "Entfernen?"; then + if confirm "Remove?"; then # shellcheck disable=SC2086 sudo pacman -Rsn --noconfirm $ORPHANS fi else - log "Keine verwaisten Pakete." + log "No orphaned packages." fi -# --- Fertig --- +# --- Done --- log "" log "============================================" -log " Moonarch Update abgeschlossen!" +log " Moonarch update complete!" log "============================================"