unter Archlinux mit yay, zsh und fzf etwas housekeeping betreiben

Ich wollte ein paar kleine Funktionen haben, um verwaiste Pakete besser handlen zu können.
Ihr kennt das sicherlich, dass man diese Pakete aufräumen will und halb sein system crashed, weil der Paket manager ein Installiertes Paket wäre verwaist, obwohl es das nicht ist.
Nerdfonts sollten auch installiert sein. Dann sehen die Icons in den Meldungen besser aus.

Nachfolgend der Code für die Funktion die Verwaisten Pakete zu löschen:

yay_remove_orphans() {
  local backup_dir="$HOME/.config/yay"
  local date_str
  local backup_file
  local orphans
                                                                                                                                                                                                                                                                                                                               
  date_str="$(date +%Y-%m-%d_%H-%M-%S)"
  backup_file="$backup_dir/remove_orph_${date_str}.bak"
                                                                                                                                                                                                                                                                                                                               
  mkdir -p "$backup_dir"
                                                                                                                                                                                                                                                                                                                               
  # Verwaiste Pakete ermitteln
  orphans="$(yay -Qtdq)"
                                                                                                                                                                                                                                                                                                                               
  if [[ -z "$orphans" ]]; then
    echo "✔ Keine verwaisten Pakete gefunden."
                                                                                                                                                                                                                                                                                     
    return 0
  fi
                                                                                                                                                                                                                                                                                                                               
  # Backup schreiben
  echo "$orphans" > "$backup_file"
                                                                                                                                                                                                                                                                                                                               
  echo "📦 Backup der verwaisten Pakete erstellt:"
  echo "   $backup_file"
  echo
  echo "🧹 Entferne folgende Pakete:"
  echo "$orphans"
  echo
                                                                                                                                                                                                                                                                                                                               
  yay -Rns $orphans
}

Und das ist der Code, um Pakete aus dem „Backup“ wieder herzustellen.

yay_restore_orphans() {
  local backup_dir="$HOME/.config/yay"
  local backup_file
  local packages
  local selected
                                                                                                                                                                                                                                                                                                                               
  # Backup-Datei auswählen
  backup_file=$(ls -1 "$backup_dir"/remove_orph_*.bak 2>/dev/null | fzf \
    --prompt="Backup auswählen: " \
    --height=40% \
    --reverse)
                                                                                                                                                                                                                                                                                                                               
  [[ -z "$backup_file" ]] && {
    echo "✖ Kein Backup ausgewählt."
    return 1
  }
                                                                                                                                                                                                                                                                                                                               
  # Pakete aus Backup lesen
  packages=("${(@f)$(cat "$backup_file")}")
                                                                                                                                                                                                                                                                                                                               
  if [[ ${#packages[@]} -eq 0 ]]; then
    echo "✖ Backup ist leer."
    return 1
  fi
                                                                                                                                                                                                                                                                                                                               
  # Pakete auswählen
  selected=($(printf "%s\n" "${packages[@]}" | fzf \
    --multi \
    --prompt="Pakete auswählen (TAB): " \
    --height=60% \
    --reverse))
                                                                                                                                                                                                                                                                                                                               
  [[ ${#selected[@]} -eq 0 ]] && {
    echo "✖ Keine Pakete ausgewählt."
    return 1
  }
                                                                                                                                                                                                                                                                                                                               
  echo
  echo "📦 Installiere folgende Pakete:"
  printf "  - %s\n" "${selected[@]}"
  echo
                                                                                                                                                                                                                                                                                                                               
  yay -S "${selected[@]}"
}