No description
  • Python 51.9%
  • Shell 41.6%
  • Lua 6.5%
Find a file
rene 8c4b61f606 repo: Gitlinks fuer powerlevel10k und zsh-syntax-highlighting entfernt
Beides sind fremde Repos, die als Gitlinks ohne .gitmodules im Index lagen.
Folgen: in einem frischen Klon waren die Verzeichnisse leer, und der
Commit-Zeiger wanderte bei jedem Selbstupdate ungewollt in Commits mit
(zuletzt in 74ae2da).

Jetzt aus dem Index genommen und in .gitignore. Installation erfolgt wie
bisher ueber setup-desktop.sh bzw. setup-desktop-asahi.sh direkt nach
~/.oh-my-zsh/custom/. Die lokalen Verzeichnisse bleiben unberuehrt.
2026-08-07 09:12:04 +02:00
bin toolbox: pacman-Unterstuetzung fuer Asahi 2026-08-06 22:23:31 +02:00
boot dotfiles: Symlink-Sync mit Boot-Automatik fuer alle vier Umgebungen 2026-08-06 22:17:36 +02:00
docker/searxng docs+searxng: Rollout, claude-local und lokale Websuche dokumentiert 2026-08-07 07:33:19 +02:00
heic-scripts heic-scripts: executable flag setzen 2026-03-14 10:02:31 +01:00
micro Fix Forgejo URLs: dsm.motocamp.de:3051 → git.motocamp.de 2026-03-07 16:58:16 +01:00
nvim Fix Forgejo URLs: dsm.motocamp.de:3051 → git.motocamp.de 2026-03-07 16:58:16 +01:00
oh-my-zsh/custom repo: Gitlinks fuer powerlevel10k und zsh-syntax-highlighting entfernt 2026-08-07 09:12:04 +02:00
zsh claude-local: Skills und Memory automatisch nachziehen 2026-08-07 09:07:47 +02:00
.gitignore repo: Gitlinks fuer powerlevel10k und zsh-syntax-highlighting entfernt 2026-08-07 09:12:04 +02:00
.p10k.zsh dotfiles: Symlink-Sync mit Boot-Automatik fuer alle vier Umgebungen 2026-08-06 22:17:36 +02:00
README.md repo: Gitlinks fuer powerlevel10k und zsh-syntax-highlighting entfernt 2026-08-07 09:12:04 +02:00

dotfiles-rene

Dotfiles und Skripte fuer vier Umgebungen auf drei Geraeten:

Geraet Umgebung $DOTFILES_OS
MacBook Pro M1 macOS macos
MacBook Pro M1 Asahi Linux (Parallelinstallation) asahi
MacBook Pro 13" Ubuntu ubuntu
MacBook Pro 16" Ubuntu ubuntu

Wird automatisch von macbook-setup deployed.

Inhalt

bin/                  Skripte (gitcheck, gitsync, gitupdate, toolbox, dotsync)
boot/                 launchd- und systemd-Units fuer den automatischen Sync
zsh/                  .zshrc mit Aliases, Cheatsheet, Tool-Integrationen
micro/                Micro-Editor Konfiguration
nvim/                 Neovim Konfiguration
oh-my-zsh/custom/     Powerlevel10k, zsh-syntax-highlighting
heic-scripts/         HEIC-zu-JPEG Konverter (h2j)
pi/                   Raspberry Pi spezifische Configs

Dotfiles synchron halten

Alle verwalteten Dateien sind Symlinks ins Repo. Sobald eine davon durch eine echte Kopie ersetzt wird, laufen die Geraete auseinander — genau das verhindert der folgende Mechanismus.

bin/install-dotfiles.sh    # alles verlinken (idempotent, sichert vorher)
dotcheck                   # pruefen: alles verlinkt oder gibt es Kopien?
dotsync                    # pullen + verlinken (laeuft auch beim Booten)
bin/install-boot-hook.sh   # automatischen Lauf beim Booten einrichten

Automatik beim Booten

install-boot-hook.sh erkennt die Umgebung und richtet das Passende ein:

Umgebung Mechanismus Wann
macOS launchd LaunchAgent beim Anmelden + alle 4 h
Asahi / Ubuntu systemd user timer 2 min nach Boot + alle 4 h

dotsync ist bewusst zurueckhaltend: ohne Netz, bei uncommitteten Aenderungen oder divergierten Branches passiert nichts. Beim naechsten Shell-Start wird gemeldet, was geschehen ist. Log: ~/.cache/dotsync.log.

Maschinenspezifisches

Nicht in die verlinkte .zshrc schreiben — sie ist auf allen Geraeten dieselbe Datei. Stattdessen:

Datei Inhalt Im Git?
~/.zshrc.local Pfade und Aliase nur fuer dieses Geraet nein
~/.secrets API-Keys nein

$DOTFILES_OS steht in jeder Shell bereit und ist der saubere Weg fuer OS-Weichen.

oh-my-zsh: Theme und Plugin gehoeren nicht hierher

powerlevel10k und zsh-syntax-highlighting sind eigenstaendige fremde Repos. Sie lagen frueher als Gitlinks ohne .gitmodules im Index — mit zwei Folgen: in einem frischen Klon waren die Verzeichnisse leer, und bei jedem Selbstupdate der beiden Repos wanderte der Commit-Zeiger ungewollt in Commits mit.

Beide sind jetzt aus dem Index entfernt und in .gitignore. Installiert werden sie von setup-desktop.sh bzw. setup-desktop-asahi.sh direkt nach ~/.oh-my-zsh/custom/. install-dotfiles.sh fasst sie bewusst nicht an.

Git-Werkzeuge (~/bin)

Alle Skripte in bin/ werden von setup-desktop.sh automatisch nach ~/ verlinkt.

gitsync - Repositories synchronisieren

Synchronisiert alle Git-Repositories in ~/git-projekte mit dem Gitea-Server:

  • Fehlende Repos werden geklont
  • Repos mit Remote-Aenderungen werden gepullt (fast-forward)
  • Repos mit lokalen Commits werden gepusht
  • Repos mit uncommitteten Aenderungen werden markiert
gitsync              # alles synchronisieren
gitsync --dry-run    # nur anzeigen, nichts aendern
gitsync --path /foo  # anderes Basisverzeichnis

Die Repo-Liste ist im Skript hinterlegt. Bei neuen Repos dort einen Eintrag ergaenzen.

gitcheck - Repository-Status pruefen

Zeigt den Status aller Repositories (lokale Aenderungen, ungepushte/ungepullte Commits). Bietet am Ende an, ein dirty Repo direkt in lazygit zu öffnen.

gitcheck             # nur Repos mit Aenderungen
gitcheck --all       # alle Repos anzeigen
gitcheck --short     # kompakte Ausgabe (Standard-Alias)

gitupdate - Repositories aktualisieren

Pullt alle Repositories (ueberspringt Repos mit lokalen Aenderungen).

gitupdate            # alle Repos pullen

toolbox / tools - interaktiver Tool-Launcher

Zweistufiges fzf-Menü: erst Kategorie wählen, dann Tool — mit Preview-Pane für ausführliche Beschreibung und Beispiele. Öffnet immer in einem neuen Tab (macOS: iTerm2, Linux: xfce4-terminal, gnome-terminal, kitty, alacritty) im aktuellen Verzeichnis.

tools                # interaktiver Launcher

Tastenbelegung im Tool-Menü:

Taste Funktion
Enter Tool in neuem Tab starten
Ctrl-X Installiertes Tool deinstallieren
Ctrl-N Neues Tool hinzufügen (Wizard)
Esc Zurück zur Kategorieauswahl

Nicht installierte Tools werden gedimmt angezeigt — Enter bietet die Installation an (brew install … / sudo apt install …). Der Kategorie-Header zeigt (installiert/gesamt).

Kategorien: Git, Dateien, Anzeige, System, Netzwerk, Text/Daten, Rechnen, Produktiv, Dokumente, Bilder, KI, Spass — insgesamt ~65 vorkonfigurierte Tools.

Eigene Tools werden in ~/.config/toolbox/custom_tools.json gespeichert und beim Start automatisch geladen. Die JSON-Datei ist auch manuell editierbar.

Mac-only Tools (z.B. temps, dog) werden auf Linux automatisch ausgeblendet. Linux-Binaries (batcat, fdfind) werden automatisch aufgelöst.

git-notify - Update-Benachrichtigung beim Shell-Start

Läuft automatisch im Hintergrund wenn eine neue interaktive Shell geöffnet wird. Prüft per git fetch alle konfigurierten Repos auf neue Remote-Commits und gibt eine kompakte Meldung aus wenn Updates verfügbar sind — kein Output wenn alles aktuell ist.

📥 Git-Updates verfügbar  dotfiles-rene (2), ki-agenten (1)
   →  gitsync  zum Aktualisieren

cb - Clipboard bereinigen

Entfernt die 2 fuehrenden Leerzeichen pro Zeile aus der Zwischenablage, die Claude Code bei der Terminal-Ausgabe einfuegt. Nuetzlich beim Kopieren mehrzeiliger Befehle oder Codeblocks.

cb    # Zwischenablage bereinigen, dann mit Cmd+V einfuegen

Verwendet pbpaste/pbcopy auf macOS und xclip auf Linux.

Terminal-Tools (installiert & konfiguriert)

Alle Tools sind über tools (toolbox) erreichbar. Hier eine Auswahl der wichtigsten:

Tool Kategorie Zweck
lazygit Git Git TUI: stagen, committen, rebasen
tig Git Git-Log TUI: History, Blame, Branches
gh Git GitHub CLI: PRs, Issues, Repos
delta Anzeige Schöne Git-Diffs (side-by-side)
yazi Dateien TUI-Dateimanager mit Bildvorschau
fzf Dateien Universeller Fuzzy-Finder
fd Dateien Schnelles find
rg Dateien Blitzschnelles grep (ripgrep)
bat Anzeige cat mit Syntax-Highlighting
eza Anzeige Modernes ls mit Git-Status
btop System Systemmonitor (CPU/RAM/Netz/Prozesse)
jq Text/Daten JSON-Prozessor
yq Text/Daten YAML/JSON-Prozessor
pandoc Dokumente Dokument-Konverter (md↔pdf↔docx)
heic2jpg / h2j Bilder HEIC → JPG konvertieren
ffmpeg Bilder Video/Audio konvertieren
tldr Produktiv Vereinfachte Manpages mit Beispielen
nmap Netzwerk Netzwerk-Scanner
zoxide Dateien Smart cd (lernt häufige Pfade)

Screensaver (cmatrix, asciiquarium, pipes.sh, cbonsai) rotieren automatisch nach 5 Minuten Idle.

Installation

Automatisch (via macbook-setup)

setup-desktop.sh klont dieses Repo und verlinkt alles automatisch.

Manuell (bestehender Mac/Linux — z.B. m13, m16)

# 1. Repo klonen
git clone https://git.motocamp.de/rene/dotfiles-rene.git ~/git-projekte/dotfiles-rene

# 2. zshrc installieren
cd ~/git-projekte/dotfiles-rene/zsh && bash install-zsh-dotfiles.sh

# 3. tools-Binary verlinken
mkdir -p ~/bin
ln -sf ~/git-projekte/dotfiles-rene/bin/toolbox ~/bin/toolbox
ln -sf ~/git-projekte/dotfiles-rene/bin/toolbox ~/bin/tools

# 4. Skripte ausführbar machen
chmod +x ~/git-projekte/dotfiles-rene/bin/*.sh

Ab dem nächsten Shell-Start läuft git-notify automatisch im Hintergrund und meldet verfügbare Updates. Mit gitsync werden alle Repos dann auf einmal aktualisiert.

Offline-KI einrichten (neuer Mac)

Lokale KI (LM Studio auf M1 Max) ueber VPN nutzen:

mac-sync                                                    # zshrc mit KI-Aliases holen
git clone https://git.motocamp.de/rene/offline-ki.git ~/git-projekte/offline-ki
cd ~/git-projekte/offline-ki && pip install -e .

Danach (VPN muss verbunden sein):

Alias Funktion
ki-chat Interaktiver Chat (lokal)
ki-agent Agent mit Dateizugriff (lokal)
ki-rchat Chat ueber ki.motocamp.de (VPN)
ki-ragent Agent ueber ki.motocamp.de (VPN)

Voraussetzung: M1 Max zuhause laeuft mit LM Studio (Server aktiv).

claude-local — Claude Code offline (nur M1 Max)

Claude Code mit lokalem Modell statt Cloud. LM Studio spricht ab 0.4.1 nativ das Anthropic-Protokoll (POST /v1/messages), es braucht keinen Proxy.

claude-local-up      # Modell laden, meldet HTTP 200
claude-local         # im Projektverzeichnis starten
Modell qwen3.6-35b-a3b-mlx (6-bit MLX, 27 GB), geladen als local-coder
Server http://localhost:11435, Kontext 64k
Profil ~/.claude-local (eigene Berechtigungen, kein sudo/curl/ssh, keine Tokens lesbar)
Gemessen auf M1 Max ~50 tok/s; Datei lesen + Bug finden 47 s, Zeile aendern 69 s

Reasoning muss AN bleiben. Mit enableThinking=false ignoriert dieser MLX-Build den System-Prompt vollstaendig und schreibt sein Nachdenken in die Antwort — Claude Code steuert das Modell aber ausschliesslich ueber den System-Prompt. Einstellung in LM Studio pro Modell, nicht ueber die API.

Werkzeuge explizit verlangen. Gemessen: bei "korrigiere den Bug und zeige den neuen Inhalt" meldete das Modell Erfolg, ohne Edit je aufzurufen — die Datei war unveraendert. Mit "nutze das Edit-Werkzeug" lief es sauber. Nach jeder behaupteten Aenderung git diff pruefen.

ki-agent und claude-local teilen sich dasselbe geladene Modell (~/.config/offline-ki/config.yaml zeigt auf local-coder), der Speicher wird also nur einmal belegt. Freigeben mit lms unload local-coder (29 GB).

Websuche fuer das lokale Modell (SearXNG)

WebSearch laeuft ueber Anthropics Server und funktioniert gegen ein lokales Modell nicht. Ersatz ist eine eigene SearXNG-Instanz im Docker plus MCP-Server.

cd ~/docker/searxng && docker compose up -d      # laeuft auf 127.0.0.1:8888
curl "http://localhost:8888/search?q=test&format=json" | head -c 200

Wichtig in ~/docker/searxng/config/settings.yml: json muss unter search.formats stehen — sonst liefert SearXNG nur HTML und der MCP-Server bekommt nichts Verwertbares. Ebenso limiter: false, sonst blockt SearXNG die eigenen Anfragen als Bot.

Der MCP-Server wird nicht ueber settings.json eingebunden — der Abschnitt mcpServers dort wird von Claude Code ignoriert. Richtig ist:

CLAUDE_CONFIG_DIR=~/.claude-local claude mcp add --scope user searxng \
  -e SEARXNG_URL=http://localhost:8888 -- npx -y mcp-searxng
CLAUDE_CONFIG_DIR=~/.claude-local claude mcp list     # muss "Connected" zeigen

Damit stehen mcp__searxng__searxng_web_search und mcp__searxng__web_url_read zur Verfuegung. Die eingebauten WebSearch/WebFetch sind im Profil gesperrt, damit das Modell keine Zuege daran verschwendet.

Kontext auf 128k, nicht 64k: Claude Codes System-Prompt, die Werkzeugdefinitionen und die CLAUDE.md fuellen 64k bereits so weit, dass ein einziges Suchergebnis "Prompt is too long" ausloest. Geladen wird deshalb mit --context-length 131072, passend dazu CLAUDE_CODE_MAX_CONTEXT_TOKENS=131072.

Die ~/.claude-local/CLAUDE.md weist das Modell an, web_url_read immer mit maxLength aufzurufen — eine GitHub-Releases-Seite sind sonst 67 KB und die Sitzung ist unbrauchbar.

Verifiziert: Frage nach der aktuellsten Nginx-Proxy-Manager-Version → gesucht, auf den GitHub-API-Endpunkt ausgewichen, v2.15.1 vom 2026-06-03 geliefert; unabhaengig gegen die GitHub-API geprueft, stimmt. Dauer 71 s.

Skills und Memory (nur lesend)

claude-local-up ruft vorab claude-local-sync auf. Das verlinkt

  • alle Skills aus ~/git-projekte/claude-skills nach ~/.claude-local/skills/
  • jedes Memory-Verzeichnis aus ~/.claude-priv/projects/*/memory ins lokale Profil

Symlinks, also immer aktuell: schreibt claude-priv eine neue Erinnerung, sieht claude-local sie sofort — nie umgekehrt. Write und Edit auf ~/.claude-priv/** und auf das Skills-Repo sind im Profil gesperrt; verifiziert mit einem Schreibversuch ueber Edit, Write und Bash-Redirect (alle abgewiesen, Pruefsumme der Datei unveraendert).

Der Aufruf ist idempotent und bleibt still, wenn es nichts zu tun gibt. Neue Projekte legen ihr Memory nur im genutzten Profil an — deshalb der Lauf bei jedem Start.

Damit das Modell die vorhandenen Kommandos kennt und nicht nachbaut, listet ~/.claude-local/CLAUDE.md das Hausinventar (gitcheck, gitupdate, gitsync, dotcheck, tools, ki commit …) samt der Regel, vorhandene Werkzeuge vorzuschlagen statt Schleifen zu schreiben. gitcheck, gitupdate und dotcheck sind ohne Rueckfrage erlaubt, gitsync nicht (pusht nach aussen).

Rollout auf den anderen Geraeten

cd ~/git-projekte/dotfiles-rene && git pull
bin/install-dotfiles.sh
bin/install-boot-hook.sh
dotcheck                    # Kontrolle

install-boot-hook.sh erkennt selbst, ob launchd (macOS) oder systemd (Asahi/Ubuntu) einzurichten ist.

Vor dem ersten Lauf pruefen: Liegt dort eine ~/.zshrc als echte Kopie mit eigenen Anpassungen? Sie wird als .bak.<Zeitstempel> gesichert und durch den Symlink ersetzt. Alles darin, was nur fuer dieses Geraet gilt, gehoert vorher nach ~/.zshrc.local — sonst ist es nach dem naechsten dotsync weg.

Offene Punkte

  • Forgejo-Token rotieren. Er wurde aus ~/.claude-{priv,work}/settings.json in die Keychain verschoben (security find-generic-password -s claude-forgejo), liegt aber weiterhin im Klartext in ~/.claude-priv/.claude.json, in Session-Transkripten und in mehreren Dateien unter ~/.claude-priv/backups/. Ein neuer Token macht alle Streukopien in einem Schritt wertlos: security add-generic-password -a rene -s claude-forgejo -w "<neu>" -U
  • dnf-Paketnamen in toolbox sind nicht gepflegt (Fallback auf den Binary-Namen). Irrelevant, solange Asahi Arch-basiert bleibt.

Neuen Mac einrichten (Kurzfassung)

  1. Auf einem bestehenden Mac: gitsync ausfuehren (pusht alles)
  2. Auf dem neuen Mac (noch ohne .zshrc) einmalig:
    curl -fsSL https://git.motocamp.de/rene/dotfiles-rene/raw/branch/main/bin/git-sync-all.sh | bash
    
  3. Danach reicht: gitsync (lokal) oder mac-sync (frisch vom Server)