macbook-setup/CLAUDE.md
Rene aa24f89511 Brave auf apt, Kitty, FaceTime-Webcam, WireGuard wg-quick, SSH-Setup, HiDPI-Verbesserungen
- Brave Browser: von Flatpak auf apt mit offiziellem Repo umgestellt
- Kitty Terminal: Installation (apt) + Konfiguration in setup-desktop.sh
- FaceTime HD Webcam: Firmware + DKMS-Treiber (bcwc_pcie)
- WireGuard: von NetworkManager auf wg-quick umgestellt, DNS fuer m13
- SSH-Key-Generierung + automatische HTTPS→SSH Umstellung der Repos
- Thunderbird: von apt auf Snap (wegen .deb-Bug)
- XFCE HiDPI: Noto Sans 10pt, Panel 28px, fuer beide MBPs vereinheitlicht
- Tastatur: ctrl:swap_lwin_lctl fuer Mac-like Cmd+C/V
- Standard-Apps: Brave (Browser), Thunderbird (Mail)
- CLAUDE.md: Doku aktualisiert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 12:43:24 +02:00

161 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# macbook-setup - Projektkontext fuer Claude Code
## Projekt-Uebersicht
Setup-Skripte fuer Ubuntu 24.04 auf alten MacBook Pros (Xubuntu-Desktop).
Repo liegt auf Gitea: git.motocamp.de/rene/macbook-setup
## Hardware
| Bezeichnung | Modell | CPU | GPU | Display | Besonderheiten |
|---|---|---|---|---|---|
| m16 | MBP 15" Mid 2014 | i7-4980HQ | Intel HD 5200 + AMD Radeon R9 M370X | Retina (2x) | AMD muss geblockt werden (amdgpu blacklist) |
| m13 | MBP 13" Late 2013 | - | nur Intel | Retina (2x) | - |
- WLAN: Broadcom BCM4360 (kein Treiber im Ubuntu-Installer!)
- m16 erreichbar per `ssh rene@m16.local`, sudo ohne Passwort konfiguriert
## Netzwerk
- Subnetz: 10.47.11.0/24
- Fritz!Box: 10.47.11.1
- Synology: 10.47.11.10 (dsm.motocamp.de)
## Installations-Workflow (WICHTIG)
1. **Stock Ubuntu 24.04 Server ISO** auf USB-Stick (dd) - **NICHT** das custom ISO (build-iso.sh)!
2. Interaktiv installieren: Sprache, Tastatur, **WLAN im Installer einrichten**, User `rene`, LVM
3. Neustarten, einloggen als rene
4. `curl -fsSL https://git.motocamp.de/rene/macbook-setup/raw/branch/main/setup-base.sh | sudo bash -s -- 16`
5. Neustarten, in XFCE einloggen
6. `curl -fsSL https://git.motocamp.de/rene/macbook-setup/raw/branch/main/setup-desktop.sh | bash`
**Warum kein custom ISO:** Broadcom-WLAN hat keinen Treiber in der Live-Umgebung.
Der interaktive Installer hat einen eingebauten WLAN-Schritt. Ohne Netzwerk koennen
die Setup-Skripte nicht heruntergeladen werden.
## Arbeitsweise
- Rene verbindet sich per SSH auf das MacBook und fuehrt Befehle dort aus
- Wenn Befehle auf dem MacBook noetig sind: per `ssh rene@<ip>` verbinden und dort ausfuehren (statt den User bitten, Befehle abzutippen)
## Paketquellen-Zuordnung
- **apt:** System-Pakete, xubuntu-desktop, KeePassXC, Kitty, Brave Browser, default-jre etc.
- **Snap:** FreeCAD, LibreOffice (wegen "benutzerdefinierte Installation nicht abgeschlossen" Bug bei .deb), Bitwarden, Thunderbird
- **Flatpak:** PrusaSlicer
- flatpak muss in setup-base.sh (root) installiert werden, nicht in setup-desktop.sh (user)
## Geloeste Probleme (Lessons Learned)
### Brave Browser
- .deb Version crashte frueher mit SIGTRAP (int3) auf aelterer Hardware
- Inzwischen funktioniert .deb/apt mit offiziellem Brave-Repo
- Loesung: apt mit Brave-Repo (in setup-base.sh)
### LibreOffice
- .deb Version zeigt "benutzerdefinierte Installation nicht abgeschlossen"
- Loesung: Snap verwenden
- default-jre Paket noetig (behebt "javaldx failed" in Writer)
### HiDPI / Retina Display
- GDK WindowScalingFactor=2 + DPI=96 (NICHT 128!)
- Cursor-Groesse: 48
- GTK-Schrift: Noto Sans 10, Titelschrift: Noto Sans Bold 10
- Panel-Hoehe: 28px (passend zur Schriftgroesse bei 2x-Skalierung)
- Referenz-Schriftgroesse: Kitty 18pt MesloLGS NF — Systemschriften sollen visuell dazu passen
- xfwm4: Default-xhdpi Theme
- XFCE Compositor deaktivieren
- xfce4-display-settings deaktivieren (verursacht Endlosschleife)
### FaceTime HD Webcam
- Broadcom 1570, haengt am PCIe-Bus (nicht USB) — kein Treiber im Kernel
- Firmware: github.com/patjak/facetimehd-firmware (extrahiert aus macOS-Treiber)
- Treiber: github.com/patjak/bcwc_pcie, installiert via DKMS (automatischer Rebuild bei Kernel-Updates)
- Modul: facetimehd, autoload via /etc/modules-load.d/facetimehd.conf
### Tastatur
- iso_layout=1 + de (mit Dead Keys, NICHT nodeadkeys) + lv3:lalt_switch + ctrl:swap_lwin_lctl
- nodeadkeys verhindert Akzent-Kombination (´e statt é)
- ctrl:swap_lwin_lctl tauscht Cmd und Ctrl (Mac-like Copy/Paste mit Cmd+C/V)
- XFCE Keyboard-Override deaktivieren (XkbDisable)
### Terminal
- Kitty als Standard-Terminal (statt xfce4-terminal)
- xfce4-terminal bleibt installiert als Fallback
- Kitty Config: MesloLGS NF 18pt, copy_or_interrupt fuer Cmd+C (kopiert bei Selektion, sonst SIGINT)
- xfce4-terminal unterstuetzt kein Remapping von Ctrl+C/V auf Copy/Paste
### Git / SSH
- SSH-Key (ed25519) wird in setup-desktop.sh generiert
- Forgejo SSH laeuft auf dsm.motocamp.de:2222 (nicht git.motocamp.de, nicht Port 22)
- Alle Repos werden automatisch von HTTPS auf SSH umgestellt
- git credential.helper store als Fallback bis SSH-Key in Forgejo hinterlegt ist
### Netzwerk & WLAN
- NetworkManager statt netplan fuer WLAN
- WLAN-Config beim netplan-zu-NM Umstieg erhalten
- systemd-networkd-wait-online deaktivieren
- cloud-init deaktivieren nach Installation
- /etc/hosts: dsm.motocamp.de → 10.47.11.10 (Synology direkt), git.motocamp.de → 10.47.11.23 (NPM/macvlan, da Gitea hinter Reverse Proxy)
### WireGuard VPN
- Konfiguration via wg-quick (Config in /etc/wireguard/wg-vps.conf)
- DNS = 10.47.11.20 (Pihole) direkt in der WireGuard-Config
- Autostart via systemctl enable wg-quick@wg-vps
- **Key-Verwechslung:** m16/m13 hatten eigenen PublicKey als Peer-PublicKey eingetragen. NM zeigt keinen Fehler, wg show zeigt einfach keine Peers. Immer pruefen: local public key darf NICHT gleich dem Peer-PublicKey sein.
- Server-PublicKey gegen funktionierende Clients verifizieren
### WireGuard Server-Referenz
- Server: 24.134.39.137:443 (VPS, Interface ens3)
- Server-PublicKey: mp0YKEjsUbnld3aTAnF6cSzTfixhZETQCoKiFHIcF30=
- Peer-IPs: .2=iPhoneR, .3=iPhoneM, .4=iPadR, .5=iPadM, .6=m1, .7=m16, .8=m13
- DNS im VPN: 10.47.11.20 (Fritz!Box), 10.47.11.1 (Gateway)
- Server macht NAT/Masquerade ueber ens3
### EFI / Boot
- auto-boot EFI-Variable auf false setzen: verhindert automatischen Start beim Anstecken des Netzteils
- Variable: /sys/firmware/efi/efivars/auto-boot-7c436110-ab2a-4bbb-a880-fe41995c9f82
### Setup-Skripte
- macOS-Installer hinterlaesst macOS-sudoers: setup-base.sh ersetzt sie durch Linux-Standard
- setup-desktop.sh: set -e entfernt, Unicode durch ASCII ersetzt
- setup-desktop.sh Autostart braucht Terminal-Fenster (xfce4-terminal) fuer interaktive Eingaben
- setup.sh: read von /dev/tty bei curl|bash
- Sleep/Suspend waehrend Installation verhindern
- DPMS gestaffelt: 5/6/7 Min (Blank/Sleep/Off)
### GNOME 48 Panel hell trotz Dark-Mode (Asahi)
- Panel bleibt hell, egal ob color-scheme auf prefer-dark steht (sowohl native Top-Bar als auch Dash to Panel)
- Dash-to-Panel custom-bg macht Panel dunkel, aber Schrift auch dunkel (unlesbar)
- Loesung: user-theme Extension + minimales DarkPanel Shell-Theme (~/.local/share/themes/DarkPanel/gnome-shell/gnome-shell.css)
- CSS nutzt `@media (prefers-color-scheme: dark)` damit Panel im Light-Mode wieder dem System folgt
- **Stolperstein:** Extension muss explizit aktiviert werden (`gnome-extensions enable user-theme@...`) — gsettings allein reicht nicht
- gnome-shell-extension-user-theme muss per dnf installiert sein
### WezTerm
- Gemeinsames Terminal fuer macOS (ersetzt iTerm2) und Linux (ersetzt xfce4-terminal)
- Config: `~/.wezterm.lua` (liegt auch im macbook-setup Repo als `wezterm.lua`)
- Catppuccin Macchiato, Hintergrund #0e0d0b, Schrift #cad3f5, MesloLGS NF
- macOS: `brew install --cask wezterm`, Linux: apt-Repo apt.fury.io/wez (setup-base.sh)
- Bestehende Maschinen aktualisieren: `curl -fsSL https://git.motocamp.de/rene/macbook-setup/raw/branch/main/wezterm.lua -o ~/.wezterm.lua`
### Zsh & Tools
- oh-my-zsh, Powerlevel10k, zsh-syntax-highlighting, MesloLGS NF Font
- PlatformIO via pipx
- h2j (HEIC-Konverter), zoxide, micro
- Terminal-Tools (apt): bat, eza, fd-find, fzf, ripgrep, tldr, ncdu, duf
- Ubuntu: fd heisst `fdfind`, bat heisst `batcat` — Aliases in .zshrc gesetzt
- `tools` Alias zeigt Cheat-Sheet mit allen Befehlen, Aliases und Skripten
- gitcheck Alias funktioniert in interaktiver Shell (nicht via `zsh -l -c`, das ist normal)
- Powerlevel10k Instant Prompt: `POWERLEVEL9K_INSTANT_PROMPT=quiet` muss VOR dem source stehen, nicht in .p10k.zsh (wird sonst ueberschrieben)
### Claude Code Multi-Profile
- Zwei Profile: `claude-priv` (mail@motocamp.de) und `claude-work` (rene@rm202.de)
- Config-Dirs: `~/.claude-priv` und `~/.claude-work`
- `claude-account priv|work` fuer Re-Login (logout, Browser, login)
- Setup: `setup-claude-profiles.sh` richtet Verzeichnisse und Shell-Aliases ein
### asciiquarium
- benoetigt Perl-Modul Term::Animation (nicht in apt verfuegbar)
- Abhaengigkeiten: libcurses-perl (apt) + Term::Animation (CPAN)
## Autoinstall (archiviert, nicht mehr verwendet)
- YAML-Heredocs brechen den Parser: printf mit \n verwenden
- Kernel-Parameter-Syntax fuer autoinstall dokumentiert
- Wurde verworfen wegen fehlendem WLAN-Treiber im Live-System