#!/bin/bash # macbook-setup/setup-desktop.sh # Desktop-Setup: oh-my-zsh, Zsh-Tooling, Claude Code, PrusaSlicer, Dotfiles, XFCE # Braucht eine laufende Desktop-Session (XFCE) — NICHT in chroot ausführen! # Verwendung: bash setup-desktop.sh # Wird automatisch beim ersten Login gestartet (via Autostart) export LANG=en_US.UTF-8 FORGEJO="https://git.motocamp.de" DOTFILES_REPO="$FORGEJO/rene/dotfiles-rene.git" # ── 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 -eq 0 ]] && { fail "Nicht als root ausführen!"; exit 1; } echo "" echo "============================================" echo " setup-desktop.sh startet" echo "============================================" # ── 1. oh-my-zsh ──────────────────────────────────────────────────────── echo -e "\n=== 1/8 oh-my-zsh ===" if [[ ! -d ~/.oh-my-zsh ]]; then sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended fi ok "oh-my-zsh installiert" # ── 2. Zsh-Plugins & Powerlevel10k ────────────────────────────────────── echo -e "\n=== 2/8 Zsh-Plugins & Powerlevel10k ===" # zsh-syntax-highlighting (Submodule im Dotfiles-Repo ist leer) ZSH_SHL_DIR="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" if [[ ! -d "$ZSH_SHL_DIR/.git" ]]; then rm -rf "$ZSH_SHL_DIR" git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$ZSH_SHL_DIR" fi ok "zsh-syntax-highlighting" # Powerlevel10k (Submodule im Dotfiles-Repo ist leer) P10K_DIR="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k" if [[ ! -d "$P10K_DIR/.git" ]]; then rm -rf "$P10K_DIR" git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "$P10K_DIR" fi ok "Powerlevel10k" # ── 3. MesloLGS NF Font (Powerlevel10k-Icons) ─────────────────────────── echo -e "\n=== 3/8 MesloLGS NF Font ===" FONT_DIR="$HOME/.local/share/fonts" mkdir -p "$FONT_DIR" FONT_BASE="https://github.com/romkatv/powerlevel10k-media/raw/master" for font in "MesloLGS NF Regular.ttf" "MesloLGS NF Bold.ttf" \ "MesloLGS NF Italic.ttf" "MesloLGS NF Bold Italic.ttf"; do if [[ ! -f "$FONT_DIR/$font" ]]; then curl -fsSL -o "$FONT_DIR/$font" "$FONT_BASE/${font// /%20}" fi done fc-cache -f "$FONT_DIR" 2>/dev/null || true ok "MesloLGS NF Fonts installiert" # ── 4. npm global + Claude Code ───────────────────────────────────────── echo -e "\n=== 4/8 Claude Code ===" mkdir -p ~/.npm-global npm config set prefix '~/.npm-global' export PATH="$HOME/.npm-global/bin:$PATH" npm install -g @anthropic-ai/claude-code ok "Claude Code installiert" # ── 5. Flatpak-Apps (PrusaSlicer + Brave) ────────────────────────────── echo -e "\n=== 5/8 Flatpak-Apps ===" flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install --user -y flathub com.prusa3d.PrusaSlicer ok "PrusaSlicer installiert (Flatpak)" flatpak install --user -y flathub com.brave.Browser ok "Brave Browser installiert (Flatpak)" # ── 6. PlatformIO (pipx) ──────────────────────────────────────────────── echo -e "\n=== 6/8 PlatformIO ===" if ! command -v pio &>/dev/null; then pipx install platformio pipx ensurepath fi ok "PlatformIO installiert (pipx)" # ── 7. Dot-Files ──────────────────────────────────────────────────────── echo -e "\n=== 7/8 Dot-Files ===" DOTFILES_DIR="$HOME/git-projekte/dotfiles-rene" if [[ ! -d "$DOTFILES_DIR" ]]; then mkdir -p "$HOME/git-projekte" git clone "$DOTFILES_REPO" "$DOTFILES_DIR" fi # Neovim if [[ -f "$DOTFILES_DIR/nvim/install-nvim-dotfiles.sh" ]]; then bash "$DOTFILES_DIR/nvim/install-nvim-dotfiles.sh" ok "Dot-Files: nvim" fi # Micro if [[ -f "$DOTFILES_DIR/micro/install-micro-dotfiles.sh" ]]; then bash "$DOTFILES_DIR/micro/install-micro-dotfiles.sh" ok "Dot-Files: micro" fi # oh-my-zsh custom (platformio.zsh etc.) if [[ -d "$DOTFILES_DIR/oh-my-zsh/custom" ]] && [[ -d ~/.oh-my-zsh/custom ]]; then for f in "$DOTFILES_DIR/oh-my-zsh/custom"/*.zsh; do [[ -f "$f" ]] && ln -sf "$f" ~/.oh-my-zsh/custom/ done ok "Dot-Files: oh-my-zsh custom" fi # heic-scripts nach ~/bin mkdir -p ~/bin if [[ -d "$DOTFILES_DIR/heic-scripts" ]]; then for script in "$DOTFILES_DIR/heic-scripts"/*; do [[ -f "$script" ]] && chmod +x "$script" && ln -sf "$script" ~/bin/ done ok "Dot-Files: heic-scripts → ~/bin" fi # git-check-all.sh + git-update-all.sh nach ~/ if [[ -d "$DOTFILES_DIR/bin" ]]; then for script in "$DOTFILES_DIR/bin"/*; do [[ -f "$script" ]] && chmod +x "$script" && ln -sf "$script" ~/ done ok "Dot-Files: git-check-all.sh, git-update-all.sh, git-sync-all.sh → ~/" fi # .zshrc (Linux-Version, ohne Conda/LM Studio/iTerm2) cat > ~/.zshrc <<'ZSHEOF' # ---------------------------------------------------------- # Zsh-Konfiguration fuer Rene (Linux / MacBook Pro) # Oh My Zsh + Powerlevel10k + Micro # ---------------------------------------------------------- # 1) Powerlevel10k Instant Prompt (muss sehr weit oben stehen) if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" fi # 2) Oh My Zsh Basis export ZSH="$HOME/.oh-my-zsh" ZSH_THEME="powerlevel10k/powerlevel10k" plugins=( git zsh-syntax-highlighting zoxide ) source "$ZSH/oh-my-zsh.sh" # 3) Powerlevel10k-Konfiguration [[ -f "$HOME/.p10k.zsh" ]] && source "$HOME/.p10k.zsh" # 4) Standard-Editor (lokal: micro, SSH: nicht erzwingen) if [[ -z "$SSH_CONNECTION" ]]; then export EDITOR="micro" export VISUAL="micro" fi # 5) Pfade export PATH="$HOME/bin:$HOME/.local/bin:$HOME/.npm-global/bin:$PATH" # 6) Aliases # ls-Varianten alias ll='ls -lha' alias la='ls -A' alias l='ls -lh' # Verzeichnisse alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' # Konfigdateien alias zshconfig='micro ~/.zshrc' alias p10kconfig='micro ~/.p10k.zsh' # Git-Kurzbefehle alias gs='git status' alias ga='git add' alias gc='git commit' alias gp='git push' alias gl='git log --oneline --graph --decorate' alias gitcheck="~/git-check-all.sh --short" alias gitupdate="~/git-update-all.sh" alias gitsync="~/git-sync-all.sh" alias mac-sync="curl -fsSL https://git.motocamp.de/rene/dotfiles-rene/raw/branch/main/bin/git-sync-all.sh | bash" # 7) History HISTFILE="$HOME/.zsh_history" HISTSIZE=5000 SAVEHIST=5000 setopt HIST_IGNORE_DUPS setopt HIST_IGNORE_SPACE setopt SHARE_HISTORY # 8) Zsh-Optionen setopt AUTO_CD # 9) Fenster-/Tab-Titel precmd() { print -Pn "\e]0;%n@%m: %~\a" } export COLORTERM=truecolor ZSHEOF ok "Dot-Files: .zshrc" # .p10k.zsh (vom Mac kopieren, falls im Repo vorhanden, sonst Wizard beim ersten Start) if [[ -f "$DOTFILES_DIR/.p10k.zsh" ]]; then cp "$DOTFILES_DIR/.p10k.zsh" ~/.p10k.zsh ok "Dot-Files: .p10k.zsh" else warn ".p10k.zsh nicht im Dotfiles-Repo — beim ersten zsh-Start 'p10k configure' ausfuehren" fi # ── 8. XFCE-Einstellungen ─────────────────────────────────────────────── echo -e "\n=== 8/8 XFCE-Einstellungen ===" # Keyboard: XFCE soll /etc/default/keyboard respektieren (nicht eigenes Layout erzwingen) if command -v xfconf-query &>/dev/null; then xfconf-query -c keyboard-layout -p /Default/XkbDisable -n -t bool -s true 2>/dev/null || true ok "XFCE Keyboard: System-Layout wird verwendet" fi # Energieeinstellungen if command -v xfconf-query &>/dev/null; then xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-on-ac-off -s 0 --create -t int xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-on-ac-sleep -s 0 --create -t int xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/blank-on-ac -s 0 --create -t int xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/blank-on-battery -s 5 --create -t int xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-on-battery-sleep -s 6 --create -t int xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-on-battery-off -s 7 --create -t int ok "XFCE Power Manager konfiguriert" else warn "xfconf-query nicht gefunden — XFCE Energieeinstellungen übersprungen" fi # XFCE Terminal: MesloLGS NF als Schriftart setzen XFCE_TERM_RC="$HOME/.config/xfce4/terminal/terminalrc" if [[ -d "$HOME/.config/xfce4" ]]; then mkdir -p "$(dirname "$XFCE_TERM_RC")" if [[ -f "$XFCE_TERM_RC" ]]; then sed -i 's/^FontName=.*/FontName=MesloLGS NF 11/' "$XFCE_TERM_RC" 2>/dev/null || true else cat > "$XFCE_TERM_RC" <<'TERMEOF' [Configuration] FontName=MesloLGS NF 11 MiscAlwaysShowTabs=FALSE MiscBell=FALSE MiscDefaultGeometry=120x35 ScrollingBar=TERMINAL_SCROLLBAR_NONE TERMEOF fi ok "XFCE Terminal: MesloLGS NF Schriftart" fi # ── Autostart entfernen ───────────────────────────────────────────────── AUTOSTART_FILE="$HOME/.config/autostart/macbook-setup-desktop.desktop" if [[ -f "$AUTOSTART_FILE" ]]; then rm "$AUTOSTART_FILE" ok "Firstboot-Autostart entfernt" fi # ── Zusammenfassung ────────────────────────────────────────────────────── echo "" echo "============================================" echo -e " ${GREEN}Desktop-Setup abgeschlossen!${NC}" echo "============================================" echo "" warn "Noch manuell erledigen:" echo " 1. Synology Drive Client installieren (.deb von synology.com)" echo " 2. Thunderbird starten → Profil aus Synology Drive einbinden" echo " 3. Brave starten → Synchronisation einrichten" echo " 4. Falls p10k-Icons fehlen: Terminal-Schriftart auf 'MesloLGS NF' setzen"