dotfiles/.local/bin/gitlab-paste
2025-05-28 18:33:04 +02:00

102 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
SNIPPET_DIR="$HOME/git/4837173"
SNIPPET_ID="4837173"
BASE_URL="https://gitlab.com/-/snippets/$SNIPPET_ID/raw/main"
cd "$SNIPPET_DIR" || { echo "❌ No se pudo acceder al snippet local"; exit 1; }
guess_extension() {
head -n 20 | grep -qE '^\s*\{' && echo "json" && return
head -n 20 | grep -qE '^# ' && echo "md" && return
head -n 20 | grep -qE '^#!/bin/(bash|sh)' && echo "sh" && return
head -n 20 | grep -qE '<[^>]+>' && echo "html" && return
head -n 20 | grep -qE '^\s*(def |class )' && echo "py" && return
echo "txt"
}
copy_to_clipboard() {
if command -v wl-copy &>/dev/null; then
echo -n "$1" | wl-copy
echo "📋 Copiado al portapapeles con wl-copy"
elif command -v xclip &>/dev/null; then
echo -n "$1" | xclip -selection clipboard
echo "📋 Copiado al portapapeles con xclip"
else
echo "⚠️ No se pudo copiar al portapapeles (falta wl-copy/xclip)"
fi
}
sync_with_remote() {
git pull --rebase || {
echo "❌ Error al sincronizar con el remoto. ¿Tienes cambios sin guardar?"
exit 1
}
}
clean_if_needed() {
local max_files=9
local file_count
file_count=$(ls -1 | wc -l)
if [ "$file_count" -ge "$max_files" ]; then
oldest=$(ls -tr | head -n 1)
echo "⚠️ Límite alcanzado. Borrando: $oldest"
git rm "$oldest"
git commit -m "Borrado $oldest (limpieza automática)"
git push
fi
}
# --- PIPE: stdin ---
if [ ! -t 0 ] && [ "$#" -eq 0 ]; then
EXT=$(guess_extension <&0)
FILE="paste_$(date '+%Y-%m-%d_%H-%M-%S').$EXT"
sync_with_remote
clean_if_needed
cat - > "$FILE"
git add "$FILE"
git commit -m "Añadido paste por pipe: $FILE"
git push
LINK="$BASE_URL/$FILE"
echo "🔗 $LINK"
copy_to_clipboard "$LINK"
exit 0
fi
# --- INTERACTIVO sin argumentos ---
if [ "$#" -eq 0 ]; then
FILE="paste_$(date '+%Y-%m-%d_%H-%M-%S').txt"
nano "$FILE"
sync_with_remote
clean_if_needed
git add "$FILE"
git commit -m "Añadido paste manual: $FILE"
git push
LINK="$BASE_URL/$FILE"
echo "🔗 $LINK"
copy_to_clipboard "$LINK"
exit 0
fi
# --- ARCHIVOS como argumentos ---
sync_with_remote
clean_if_needed
for src in "$@"; do
filename=$(basename "$src")
cp "$src" "$filename" || { echo "❌ No se pudo copiar '$src'"; exit 1; }
git add "$filename"
done
git commit -m "Añadido(s): $*" || echo "⚠️ Nada nuevo que comitear"
git push
for src in "$@"; do
filename=$(basename "$src")
LINK="$BASE_URL/$filename"
echo "🔗 $LINK"
copy_to_clipboard "$LINK"
done