140 lines
6.1 KiB
Bash
140 lines
6.1 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# macbook-setup/setup-base-asahi.sh
|
||
|
|
# Basis-Setup fuer Asahi Linux (Fedora Remix) auf Apple Silicon M1
|
||
|
|
# Fokus: Terminal-Umgebung (zsh, Tools, Screensaver)
|
||
|
|
# System-spezifisches (XFCE, HiDPI, WireGuard, Energie) wird vor Ort gemacht
|
||
|
|
# Verwendung: sudo bash setup-base-asahi.sh
|
||
|
|
# Kann mehrfach ausgefuehrt werden (idempotent)
|
||
|
|
|
||
|
|
# ── Farben ──────────────────────────────────────────────────────────────
|
||
|
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
||
|
|
ok() { echo -e "${GREEN}[OK] $*${NC}"; }
|
||
|
|
warn() { echo -e "${YELLOW}[!!] $*${NC}"; }
|
||
|
|
fail() { echo -e "${RED}[FAIL] $*${NC}"; }
|
||
|
|
|
||
|
|
# ── Root-Check ─────────────────────────────────────────────────────────
|
||
|
|
[[ $EUID -ne 0 ]] && { fail "Bitte als root ausfuehren (sudo)"; exit 1; }
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "============================================"
|
||
|
|
echo " setup-base-asahi.sh fuer M1 (Asahi Linux)"
|
||
|
|
echo " Terminal-Grundsetup"
|
||
|
|
echo "============================================"
|
||
|
|
|
||
|
|
# ── 1. sudoers ───────────────────────────────────────────────────────────
|
||
|
|
echo -e "\n=== 1/7 sudoers ==="
|
||
|
|
cat > /etc/sudoers <<'SUDOEOF'
|
||
|
|
Defaults env_reset
|
||
|
|
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||
|
|
|
||
|
|
root ALL=(ALL:ALL) ALL
|
||
|
|
%wheel ALL=(ALL:ALL) ALL
|
||
|
|
|
||
|
|
@includedir /etc/sudoers.d
|
||
|
|
SUDOEOF
|
||
|
|
chmod 440 /etc/sudoers
|
||
|
|
echo "rene ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/rene
|
||
|
|
chmod 440 /etc/sudoers.d/rene
|
||
|
|
ok "sudoers: Linux-Standard + NOPASSWD fuer rene"
|
||
|
|
|
||
|
|
# ── 2. Locale & Timezone ────────────────────────────────────────────────
|
||
|
|
echo -e "\n=== 2/7 Locale & Timezone ==="
|
||
|
|
dnf install -y glibc-langpack-de 2>/dev/null || true
|
||
|
|
localectl set-locale LANG=de_DE.UTF-8
|
||
|
|
timedatectl set-timezone Europe/Berlin 2>/dev/null || true
|
||
|
|
ok "Locale: de_DE.UTF-8, Timezone: Europe/Berlin"
|
||
|
|
|
||
|
|
# ── 3. Sleep verhindern waehrend Installation ───────────────────────────
|
||
|
|
echo -e "\n=== 3/7 Sleep verhindern ==="
|
||
|
|
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target 2>/dev/null || true
|
||
|
|
ok "Sleep/Suspend deaktiviert (fuer Installation)"
|
||
|
|
|
||
|
|
# ── 4. System aktualisieren ─────────────────────────────────────────────
|
||
|
|
echo -e "\n=== 4/7 System aktualisieren ==="
|
||
|
|
dnf upgrade -y || warn "dnf upgrade hatte Probleme"
|
||
|
|
ok "System aktuell"
|
||
|
|
|
||
|
|
# ── 5. Pakete installieren ──────────────────────────────────────────────
|
||
|
|
echo -e "\n=== 5/7 Pakete installieren ==="
|
||
|
|
|
||
|
|
# Basis-Tools
|
||
|
|
dnf install -y \
|
||
|
|
git curl wget \
|
||
|
|
zsh neovim micro \
|
||
|
|
python3 python3-pip pipx \
|
||
|
|
nodejs npm \
|
||
|
|
openssh-server \
|
||
|
|
bc \
|
||
|
|
|| warn "Einige Basis-Pakete konnten nicht installiert werden"
|
||
|
|
|
||
|
|
# Terminal-Tools
|
||
|
|
dnf install -y \
|
||
|
|
bat eza fd-find fzf ripgrep tldr ncdu duf \
|
||
|
|
zoxide \
|
||
|
|
htop btop \
|
||
|
|
fastfetch \
|
||
|
|
|| warn "Einige Terminal-Tools konnten nicht installiert werden"
|
||
|
|
|
||
|
|
# Spass-Tools
|
||
|
|
dnf install -y \
|
||
|
|
cowsay fortune-mod \
|
||
|
|
cmatrix \
|
||
|
|
perl-Curses \
|
||
|
|
|| warn "Einige Spass-Tools konnten nicht installiert werden"
|
||
|
|
|
||
|
|
ok "Pakete installiert"
|
||
|
|
|
||
|
|
# asciiquarium (Perl-basiert, nicht in Fedora-Repos)
|
||
|
|
echo ""
|
||
|
|
perl -MTerm::Animation -e1 2>/dev/null || cpan -T Term::Animation
|
||
|
|
if ! command -v asciiquarium &>/dev/null; then
|
||
|
|
curl -fsSL https://robobunny.com/projects/asciiquarium/asciiquarium_1.1.tar.gz -o /tmp/asciiquarium.tar.gz \
|
||
|
|
&& tar xzf /tmp/asciiquarium.tar.gz -C /tmp \
|
||
|
|
&& cp /tmp/asciiquarium_1.1/asciiquarium /usr/local/bin/ \
|
||
|
|
&& chmod +x /usr/local/bin/asciiquarium \
|
||
|
|
&& ok "asciiquarium installiert" \
|
||
|
|
|| warn "asciiquarium uebersprungen"
|
||
|
|
# Patch: beliebige Taste beendet asciiquarium (statt nur 'q')
|
||
|
|
if [ -f /usr/local/bin/asciiquarium ]; then
|
||
|
|
sed -i '/\$in eq .q.*quit/d' /usr/local/bin/asciiquarium
|
||
|
|
sed -i "s/elsif( \$in eq 'r'/if ( \$in eq 'r'/" /usr/local/bin/asciiquarium
|
||
|
|
sed -i "/\$in eq 'p'.*paused/a\\\t\t\telsif( \$in ne ERR ) { quit(); } # Any key exits" /usr/local/bin/asciiquarium
|
||
|
|
fi
|
||
|
|
rm -rf /tmp/asciiquarium*
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 6. /etc/hosts ───────────────────────────────────────────────────────
|
||
|
|
echo -e "\n=== 6/7 /etc/hosts ==="
|
||
|
|
for entry in "10.47.11.10 dsm.motocamp.de" "10.47.11.23 git.motocamp.de"; do
|
||
|
|
host="${entry##* }"
|
||
|
|
if ! grep -q "$host" /etc/hosts; then
|
||
|
|
echo "$entry" >> /etc/hosts
|
||
|
|
ok "/etc/hosts: $host"
|
||
|
|
else
|
||
|
|
ok "/etc/hosts: $host (bereits vorhanden)"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# ── 7. Services & Shell ─────────────────────────────────────────────────
|
||
|
|
echo -e "\n=== 7/7 Services & Shell ==="
|
||
|
|
systemctl enable sshd 2>/dev/null || true
|
||
|
|
systemctl start sshd 2>/dev/null || true
|
||
|
|
|
||
|
|
# zsh als Standard-Shell
|
||
|
|
chsh -s /bin/zsh rene 2>/dev/null || true
|
||
|
|
ok "sshd aktiviert, zsh als Standard-Shell"
|
||
|
|
|
||
|
|
# Sleep wieder erlauben
|
||
|
|
systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target 2>/dev/null || true
|
||
|
|
|
||
|
|
# ── Zusammenfassung ──────────────────────────────────────────────────────
|
||
|
|
echo ""
|
||
|
|
echo "============================================"
|
||
|
|
echo -e " ${GREEN}Terminal-Grundsetup abgeschlossen!${NC}"
|
||
|
|
echo "============================================"
|
||
|
|
echo ""
|
||
|
|
echo "Naechste Schritte:"
|
||
|
|
echo " 1. Ausloggen und als rene mit zsh neu einloggen"
|
||
|
|
echo " 2. setup-desktop-asahi.sh ausfuehren (oh-my-zsh, Dotfiles, p10k)"
|
||
|
|
echo " 3. System-Setup (XFCE, HiDPI, WireGuard etc.) vor Ort machen"
|