- fzf-basierte Auswahl mit Kategorien und Beschreibungen - TUI-Tools öffnen in neuem Tab (iTerm2 auf Mac, xfce4-terminal/gnome-terminal auf Linux) - Output-Tools laufen inline - Mac-only Tools (temps) werden auf Linux ausgeblendet - Linux-Binaries (batcat, fdfind) werden automatisch aufgelöst - tools() → toolbox, tools-ref() behält statische Cheatsheet-Ansicht Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
435 lines
17 KiB
Bash
435 lines
17 KiB
Bash
# ----------------------------------------------------------
|
|
# Zsh-Konfiguration für René
|
|
# Oh My Zsh + Powerlevel10k + Micro + Conda
|
|
# ----------------------------------------------------------
|
|
|
|
# 1) Powerlevel10k Instant Prompt (muss sehr weit oben stehen)
|
|
# quiet: cowsay-Begruessung erzeugt Console-Output, Warnung unterdruecken
|
|
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
|
|
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
|
|
|
|
# 1b) Secrets laden (API-Keys etc. — liegt lokal, NICHT im Repo)
|
|
[[ -f "$HOME/.secrets" ]] && source "$HOME/.secrets"
|
|
|
|
# 2) Oh My Zsh Basis
|
|
export ZSH="$HOME/.oh-my-zsh"
|
|
|
|
# Theme: Powerlevel10k
|
|
ZSH_THEME="powerlevel10k/powerlevel10k"
|
|
|
|
# Plugins
|
|
# - git: Git-Shortcuts
|
|
# - zsh-syntax-highlighting: farbige Befehle in der Shell
|
|
plugins=(
|
|
git
|
|
zsh-syntax-highlighting
|
|
zoxide
|
|
)
|
|
|
|
# Oh My Zsh laden
|
|
source "$ZSH/oh-my-zsh.sh"
|
|
|
|
# 3) Powerlevel10k-Konfiguration laden (falls vorhanden)
|
|
[[ -f "$HOME/.p10k.zsh" ]] && source "$HOME/.p10k.zsh"
|
|
|
|
# 4) Sprache/Lokalisierung (optional, bei Bedarf anpassen)
|
|
# export LANG=de_DE.UTF-8
|
|
# export LC_ALL=de_DE.UTF-8
|
|
|
|
# 5) Standard-Editor (Mac lokal: micro, SSH-Session: nichts erzwingen)
|
|
if [[ -z "$SSH_CONNECTION" ]]; then
|
|
export EDITOR="micro"
|
|
export VISUAL="micro"
|
|
fi
|
|
|
|
# 6) Pfade erweitern
|
|
|
|
# LM Studio CLI (bereits vorhanden, übernommen)
|
|
export PATH="$PATH:$HOME/.lmstudio/bin"
|
|
|
|
export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
|
|
|
|
# 7) Nützliche Aliases
|
|
|
|
# ls-Varianten
|
|
alias ll='ls -lha'
|
|
alias la='ls -A'
|
|
alias l='ls -lh'
|
|
|
|
# Verzeichnisse
|
|
alias ..='cd ..'
|
|
alias ...='cd ../..'
|
|
alias ....='cd ../../..'
|
|
|
|
# Schneller in 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 cb="pbpaste | sed 's/^ //' | pbcopy"
|
|
# Ubuntu-Kompatibilitaet: fd und bat heissen dort anders
|
|
command -v fdfind &>/dev/null && ! command -v fd &>/dev/null && alias fd='fdfind'
|
|
command -v batcat &>/dev/null && ! command -v bat &>/dev/null && alias bat='batcat'
|
|
|
|
# Offline-KI Shortcuts
|
|
alias ki-chat='ki interactive'
|
|
alias ki-agent='ki interactive --agent-mode'
|
|
alias ki-rchat='ki --remote interactive'
|
|
alias ki-ragent='ki --remote interactive --agent-mode'
|
|
alias ki-commit='ki commit'
|
|
alias ki-fix='ki fix'
|
|
alias ki-roast='ki roast'
|
|
alias ki-docker='ki docker'
|
|
alias ki-dns='ki dns'
|
|
alias ki-diff='ki diff'
|
|
alias ki-wetter='ki wetter'
|
|
alias ki-tl='ki tl'
|
|
|
|
alias fetch="fastfetch"
|
|
alias temps="sudo powermetrics -s cpu_power,gpu_power,thermal,battery -i 1000 -n 1"
|
|
|
|
# Interaktiver Tool-Launcher (fzf + iTerm2/xfce4-terminal)
|
|
alias tools='toolbox'
|
|
|
|
# Cheat-Sheet: statische Referenz (tools-ref für Vollübersicht)
|
|
tools-ref() {
|
|
cat <<'TOOLS'
|
|
|
|
╔══════════════════════════════════════════════════════════════╗
|
|
║ Terminal Cheat-Sheet ║
|
|
╚══════════════════════════════════════════════════════════════╝
|
|
|
|
GIT
|
|
────────────────────────────────────────────────────────────────
|
|
gs git status
|
|
ga git add
|
|
gc git commit
|
|
gp git push
|
|
gl git log (oneline, graph)
|
|
gd git diff
|
|
gco git checkout
|
|
gb git branch
|
|
gitcheck Status aller Git-Repos pruefen
|
|
gitupdate alle Git-Repos pullen
|
|
gitsync alle Repos sync (push+pull)
|
|
mac-sync git-sync remote ausfuehren
|
|
|
|
PLATFORMIO
|
|
────────────────────────────────────────────────────────────────
|
|
pio run kompilieren
|
|
pio run -t upload flashen
|
|
pio device monitor seriellen Monitor oeffnen
|
|
pio run -t clean Build-Artefakte loeschen
|
|
pio lib install Bibliothek installieren
|
|
pio init --board <board> neues Projekt erstellen
|
|
|
|
NAVIGATION & DATEIEN
|
|
────────────────────────────────────────────────────────────────
|
|
z <pfad> zoxide: smart cd (lernt haeufige Pfade)
|
|
ll / la / l ls-Varianten (-lha / -A / -lh)
|
|
.. / ... / .... schnell hoch navigieren
|
|
eza modernes ls (Farben, Icons, Git-Status)
|
|
eza -la alle Dateien mit Details
|
|
eza -T Baumansicht
|
|
bat <datei> cat mit Syntax-Highlighting
|
|
fd <muster> schnelles find (z.B. fd '\.txt$')
|
|
rg <text> blitzschnelles grep (z.B. rg 'TODO' src/)
|
|
fzf Fuzzy-Finder (Ctrl+T Dateien, Ctrl+R History)
|
|
ncdu interaktive Festplattennutzung
|
|
duf schoene Uebersicht freier Speicherplatz
|
|
yazi Terminal-Dateimanager (q = quit)
|
|
micro <datei> einfacher Editor (Ctrl+S, Ctrl+Q)
|
|
|
|
BILDER (~/bin)
|
|
────────────────────────────────────────────────────────────────
|
|
h2j / heic2jpg HEIC → JPG konvertieren
|
|
heic2jpg_resize + verkleinern
|
|
heic2jpg_delete + HEIC loeschen
|
|
heic2jpg_resize_delete + beides
|
|
jpg_resize nur JPG verkleinern
|
|
|
|
SSH-SHORTCUTS
|
|
────────────────────────────────────────────────────────────────
|
|
ssh ds DiskStation (ds918admin@10.47.11.10)
|
|
ssh ds "cmd" Befehl remote ausfuehren
|
|
scp f ds:~/ Datei auf DS kopieren
|
|
|
|
SYSTEM & KONFIG
|
|
────────────────────────────────────────────────────────────────
|
|
fetch fastfetch (Systeminfo)
|
|
temps CPU/GPU-Temperatur + Akku (Mac)
|
|
cb Clipboard bereinigen (2 Leerzeichen weg)
|
|
zshconfig ~/.zshrc bearbeiten
|
|
p10kconfig ~/.p10k.zsh bearbeiten
|
|
tldr <befehl> Kurzanleitung mit Beispielen
|
|
|
|
CLAUDE CODE
|
|
────────────────────────────────────────────────────────────────
|
|
claude-priv Claude Code mit Privat-Account (mail@motocamp.de)
|
|
claude-work Claude Code mit Work-Account (rene@rm202.de)
|
|
claude-account priv|work Re-Login: abmelden, Browser, neu anmelden
|
|
|
|
MACBOOK-SETUP (curl | bash)
|
|
────────────────────────────────────────────────────────────────
|
|
setup-base.sh <13|16> Basis-Setup (als root)
|
|
setup-desktop.sh Desktop + Apps (als user)
|
|
|
|
OFFLINE-KI (LM Studio)
|
|
────────────────────────────────────────────────────────────────
|
|
ki-chat interaktiver Chat (Streaming)
|
|
ki-agent Agent-Modus (Dateizugriff, Shell)
|
|
ki-rchat Chat ueber ki.motocamp.de (VPN)
|
|
ki-ragent Agent ueber ki.motocamp.de (VPN)
|
|
ki-commit Commit-Message generieren + committen
|
|
ki-fix letzten fehlgeschlagenen Befehl fixen
|
|
ki-roast <f> humorvolles Code-Review
|
|
ki-docker DS Container-Status (logs, check)
|
|
ki-dns DNS-Check motocamp.de Subdomains
|
|
ki-diff Git-Diff mit KI-Zusammenfassung
|
|
ki-wetter Wetter + KI-Kommentar
|
|
ki-tl Too Long: Dateien/Text zusammenfassen
|
|
ki explain ! letzten Shell-Befehl erklaeren
|
|
ki cow "..." Chat mit Cowsay-Ausgabe
|
|
ki foreach "*.py" "Finde Bugs" Prompt pro Datei
|
|
ki watch log "Erklaere Fehler" Datei ueberwachen
|
|
ki pipe stdin -> KI -> stdout
|
|
ki status Dashboard
|
|
ki models verfuegbare Modelle
|
|
ki skills Skills auflisten
|
|
ki skill <name> -f <datei> Skill ausfuehren
|
|
|
|
NEUE TOOLS
|
|
────────────────────────────────────────────────────────────────
|
|
lg lazygit: Git-TUI (space=stage, c=commit, p=push, ?=Hilfe)
|
|
- einzelne Zeilen selektiv stagen
|
|
- interaktiver Rebase ohne scary Kommandos
|
|
git diff/log automatisch via delta (side-by-side, n/N=naechster Block)
|
|
Ctrl+R atuin: fuzzy History-Suche mit Zeitstempel + Exit-Code
|
|
mise use Tool-Versionen pro Projekt (mise use python@3.12)
|
|
Stats Menüleisten-Monitor (CPU/RAM/Netz/Akku)
|
|
|
|
SPASS
|
|
────────────────────────────────────────────────────────────────
|
|
cmatrix Matrix-Regen (q = quit)
|
|
asciiquarium Aquarium im Terminal (q = quit)
|
|
pipes.sh animierte Rohre (q = quit)
|
|
cbonsai -l wachsender Bonsai-Baum (q = quit)
|
|
ls | nms Sneakers-Entschlüsselungseffekt
|
|
fortune | cowsay zufaelliger Spruch mit Kuh
|
|
|
|
TOOLS
|
|
}
|
|
# Kurzform
|
|
alias tr='tools-ref'
|
|
|
|
# Terminal-Screensaver: zufaellig cmatrix oder asciiquarium nach 5 Min Idle
|
|
TMOUT=300
|
|
TRAPALRM() {
|
|
local screensavers=()
|
|
command -v cmatrix &>/dev/null && screensavers+=("cmatrix -sab")
|
|
command -v asciiquarium &>/dev/null && screensavers+=("asciiquarium")
|
|
command -v pipes.sh &>/dev/null && screensavers+=("pipes.sh -t 0 -p 4")
|
|
command -v cbonsai &>/dev/null && screensavers+=("cbonsai -l")
|
|
(( ${#screensavers[@]} )) && eval "${screensavers[$((RANDOM % ${#screensavers[@]} + 1))]}"
|
|
}
|
|
|
|
# Begruessung: zufaellig Systemstatus, Spruch oder Witz
|
|
if [[ -o interactive ]] && command -v cowsay &>/dev/null; then
|
|
_greet() {
|
|
local all_cows=(default tux sheep elephant dragon gnu koala)
|
|
local cow_files=()
|
|
local cowpath
|
|
cowpath=$(cowsay -l 2>/dev/null | tail -n +2 | tr ' ' '\n')
|
|
for c in "${all_cows[@]}"; do
|
|
echo "$cowpath" | grep -qx "$c" && cow_files+=("$c")
|
|
done
|
|
(( ${#cow_files[@]} == 0 )) && cow_files=(default)
|
|
local cow="${cow_files[$((RANDOM % ${#cow_files[@]} + 1))]}"
|
|
case $((RANDOM % 3)) in
|
|
0) # Systemstatus
|
|
local host load
|
|
host=$(hostname -s)
|
|
load=$(uptime | sed 's/.*average[s]*: *\([^ ]*\).*/\1/')
|
|
echo "$host | load $load" | cowsay -f "$cow"
|
|
;;
|
|
1) # Datum-Spruch
|
|
local day=$(date +%u) msg
|
|
case $day in
|
|
1) msg="Montag... Kaffee ist Pflicht!" ;;
|
|
2) msg="Dienstag - immerhin kein Montag mehr." ;;
|
|
3) msg="Mittwoch - Bergfest!" ;;
|
|
4) msg="Donnerstag - morgen ist fast Wochenende!" ;;
|
|
5) msg="Freitag! Die Woche gehoert dir." ;;
|
|
6) msg="Samstag - Zeit fuer Projekte!" ;;
|
|
7) msg="Sonntag - entspann dich mal." ;;
|
|
esac
|
|
echo "$msg ($(date '+%d.%m.%Y, %H:%M'))" | cowsay -f "$cow"
|
|
;;
|
|
2) # Witz/Spruch via fortune
|
|
if command -v fortune &>/dev/null; then
|
|
fortune -s 2>/dev/null | cowsay -f "$cow"
|
|
else
|
|
echo "Keine Witze installiert. Sad." | cowsay -f "$cow"
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
_greet
|
|
unfunction _greet
|
|
fi
|
|
|
|
alias gitsync="~/git-projekte/dotfiles-rene/bin/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"
|
|
|
|
# 8) Conda-Initialisierung
|
|
# ----------------------------------------------------------
|
|
# Dieser Block wurde ursprünglich von `conda init` erzeugt.
|
|
# Wenn Conda-Updates irgendwann meckern, einfach erneut:
|
|
# conda init zsh
|
|
# laufen lassen.
|
|
# ----------------------------------------------------------
|
|
__conda_setup="$('/Users/rene/miniconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
|
|
if [ $? -eq 0 ]; then
|
|
eval "$__conda_setup"
|
|
else
|
|
if [ -f "/Users/rene/miniconda3/etc/profile.d/conda.sh" ]; then
|
|
. "/Users/rene/miniconda3/etc/profile.d/conda.sh"
|
|
else
|
|
export PATH="/Users/rene/miniconda3/bin:$PATH"
|
|
fi
|
|
fi
|
|
unset __conda_setup
|
|
# <<< conda initialize <<<
|
|
|
|
# 9) Kleine Qualität-of-Life-Einstellungen für Zsh
|
|
|
|
# Bessere History
|
|
HISTFILE="$HOME/.zsh_history"
|
|
HISTSIZE=5000
|
|
SAVEHIST=5000
|
|
|
|
setopt HIST_IGNORE_DUPS # keine direkt aufeinanderfolgenden Duplikate
|
|
setopt HIST_IGNORE_SPACE # Befehle, die mit Leerzeichen beginnen, nicht speichern
|
|
setopt SHARE_HISTORY # History zwischen mehreren Zsh-Sessions teilen
|
|
|
|
# Automatisches cd wenn nur ein Verzeichnisname eingegeben wird
|
|
setopt AUTO_CD
|
|
|
|
# Autokorrektur bei Tippfehlern (optional, wenn es nervt, auskommentieren)
|
|
# setopt CORRECT
|
|
|
|
# 10) Prompt-Titel schön halten (Fenster-/Tab-Titel)
|
|
# Zeigt user@host:pfad an
|
|
precmd() { print -Pn "\e]0;%n@%m: %~\a" }
|
|
export COLORTERM=truecolor
|
|
|
|
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
|
|
|
|
# 11) Tool-Integrationen
|
|
eval "$(atuin init zsh)"
|
|
eval "$(mise activate zsh)"
|
|
|
|
# delta als Git-Pager
|
|
git config --global core.pager delta
|
|
git config --global interactive.diffFilter "delta --color-only"
|
|
git config --global delta.navigate true
|
|
git config --global delta.side-by-side true
|
|
|
|
# lazygit Alias
|
|
alias lg='lazygit'
|
|
|
|
# claude-profiles-start
|
|
alias claude-priv='CLAUDE_CONFIG_DIR=~/.claude-priv command claude' # mail@motocamp.de
|
|
alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work command claude' # rene@rm202.de
|
|
alias claude='echo "Bitte claude-priv oder claude-work verwenden."'
|
|
claude-account() {
|
|
local profile="$1"
|
|
if [[ "$profile" != "priv" && "$profile" != "work" ]]; then
|
|
echo "Verwendung: claude-account priv|work"
|
|
return 1
|
|
fi
|
|
local config_dir="$HOME/.claude-${profile}"
|
|
echo "==> Claude Code abmelden (${profile})..."
|
|
CLAUDE_CONFIG_DIR="$config_dir" command claude /logout
|
|
echo ""
|
|
echo "==> Browser oeffnen - bitte ab- und neu anmelden..."
|
|
open "https://console.anthropic.com"
|
|
read -r "?Wenn im Browser fertig, Enter druecken..."
|
|
echo ""
|
|
echo "==> Claude Code anmelden (${profile})..."
|
|
CLAUDE_CONFIG_DIR="$config_dir" command claude /login
|
|
}
|
|
# claude-profiles-end
|
|
|
|
nvim-cheats() {
|
|
echo -e "\e[1;36m=== NVIM CHEAT SHEET ===\e[0m\n"
|
|
|
|
# Navigation
|
|
echo -e "\e[1mNAVIGATION & POSITIONIERUNG\e[0m"
|
|
echo "-------------------------------------------"
|
|
echo "h/j/k/l : Links/Unten/Oben/Rechts bewegen"
|
|
echo "w/b : Zum nächsten/vorherigen Wort springen"
|
|
echo "gg/G : Anfang / Ende der Datei"
|
|
echo ":Nr : Zur Zeilenummer Nr springen (z.B. :42)\n"
|
|
|
|
# LÖSCHEN (Neu hinzugefügt)
|
|
echo -e "\e[1;33mLÖSCHEN & BEARBEITEN\e[0m" # Gelb für Hervorhebung
|
|
echo "-------------------------------------------"
|
|
echo "dd : Ganze Zeile löschen"
|
|
echo "dw : Wort löschen"
|
|
echo "D / d$ : Alles nach Cursor bis Zeilenende löschen"
|
|
echo "d0 : Alles vor Cursor bis Zeilenbeginn löschen"
|
|
echo "x : Zeichen unter dem Cursor löschen"
|
|
echo "X : Zeichen vor dem Cursor löschen\n"
|
|
|
|
# EDITING & UNDO
|
|
echo -e "\e[1mEDITING & RÜCKGÄNGIG\e[0m"
|
|
echo "-------------------------------------------"
|
|
echo "i/a : Einfügemodus (vor/nach Cursor)"
|
|
echo "o/O : Neue Zeile öffnen (unter/über)"
|
|
echo "Esc : In den Normalmodus zurückkehren"
|
|
echo "u : Rückgängig machen (Undo)"
|
|
echo "Ctrl-r : Wiederherstellen (Redo)\n"
|
|
|
|
# VISUELL & COPY/PASTE
|
|
echo -e "\e[1mVISUELL WÄHLEN & KOPIEREN\e[0m"
|
|
echo "-------------------------------------------"
|
|
echo "v : Visueller Modus starten"
|
|
echo "yy/yw : Kopieren (Yank) Zeile/Wort"
|
|
echo "p/P : Einfügen (Paste) nach/vor Cursor\n"
|
|
|
|
# CHANGE (Löschen + Einfügemodus)
|
|
echo -e "\e[1mCHANGE (Löschen & direkt tippen)\e[0m"
|
|
echo "-------------------------------------------"
|
|
echo "cw : Wort ab Cursor ersetzen"
|
|
echo "cc / S : Ganze Zeile ersetzen"
|
|
echo "ci\" : Inhalt in Anführungszeichen ersetzen"
|
|
echo "ci( : Inhalt in Klammern ersetzen"
|
|
echo "C / c\$ : Alles nach Cursor bis Zeilenende ersetzen\n"
|
|
|
|
# SUCHE & ERSETZEN
|
|
echo -e "\e[1mSUCHE & ERSETZEN\e[0m"
|
|
echo "-------------------------------------------"
|
|
echo "/suche : Suche vorwärts"
|
|
echo "?suche : Suche rückwärts"
|
|
echo "n/N : Nächsten/vorherigen Treffer anspringen"
|
|
echo "* : Wort unter Cursor suchen"
|
|
echo ":%s/alt/neu/g : Ersetzen (global in Datei)\n"
|
|
|
|
# DATEI & FENSTER
|
|
echo -e "\e[1mDATEI & FENSTER\e[0m"
|
|
echo "-------------------------------------------"
|
|
echo ":wq / :x : Speichern und schließen"
|
|
echo ":q! : Änderungen verwerfen & schließen"
|
|
echo ":sp file : Split horizontal (neues Fenster unten)"
|
|
echo ":vs file : Split vertikal (neues Fenster rechts)\n"
|
|
}
|