Hay muchas cosas que hago rutinariamente con mi computadora. Y cada vez más me agarra el bicho de analizar qué nueva actividad rutinaria puedo automatizar para "ahorrar" tiempo. Obviamente que esa no es la única razón por la cual me gusta automatizarlas, el simple hecho de analizar estas cosas y moldearlas en un literal guión de instrucciones, por alguna razón, me genera un placer inmenso.

Conforme pase el tiempo voy a publicar algunos scripts para varias cosas que hago, algunos bien simples, otros más complejos.

Yutub es mi vida.

Yo veo muchas cosas en esa maldita plataforma. Me tiene muy agarrado desde hace varios años, y creo que a varios de acá también. En fin, que con el paso del tiempo usar la interfaz web oficial me anduvo resultando algo incómodo en algunos casos, como cuando quiero buscar un solo video cuyo nombre conozco y lo puedo escribir, pero para encontrarlo tengo que hacer toda esta sarta de cosas:

Para el usuario común no le parece tanto tiempo. De hecho, muy poca gente que conozco usa cosas como las palabras clave de los marcadores (o en el caso de los navegadores Chromium-like, añadirle atajos a los buscadores), que te ahorran tener que abrir primero el sitio y dentro del cuadro de la página insertar tu búsqueda.

En mi caso, lo que más me molesta de esto es la parte de tener que hacer clic para obtener resultados. Con el paso de los años me ha gustado cada vez más manejarme con el teclado, me parece más cómodo en simples palabras.

Así que hice esta función de bash que la tengo inserta en mi archivo .bashrc para poder llamarla en cualquier terminal que tenga:

yt (){ 
	youtube-dl -O "[%(uploader)s] %(title)s https://www.youtube.com/watch?v=%(id)s" "ytsearch10:$*" 2> /dev/null \
	| fzf --no-mouse --cycle -m -d "\ " --with-nth 1..-2 --bind="\
	alt-enter:execute(mpv {+-1}),\
	enter:execute(mpv --ytdl-format=\"bestvideo[height<=1080]+bestaudio\" {+-1}),\
	alt-n:execute(mpv --ytdl-raw-options=\"\" {+-1}),\
	n:execute(mpv --ytdl-raw-options=\"\" --ytdl-format=\"bestvideo[height<=1080]+bestaudio\" {+-1}),\
	a:execute(mpv --profile=audio {+-1}),\
	y:execute(echo {+-1} | xclip)"
}

Esta vez no tendrán el placer de ver mi evolución de este comando, porque hace mucho que lo implementé y no tengo las versiones anteriores. Primero que nada, para usar este comando es necesario tener instalado youtube-dl, o yt-dlp como alternativa, y fzf. Algunos comandos ejecutan mpv, pero no es necesario para correr el script.

Lo que hace es buscar hasta 10 videos de la búsqueda que pusimos con los argumentos de la función ($ yt videos de gatos por ejemplo llena la terminal de abominaciones satánicas, sin necesidad de entrecomillar nada), y formatea la salida con el parámetro -O. El nombre del canal entre corchetes, el título después, y el enlace al video al final. Esto último es para la interfaz que implementé con fzf, que la verdad es una pasada. Lo que sea que le des a través de stdin lo procesa como una lista para seleccionar. Le añadí unos cuantos comandos para abrir cada video con mpv, o copiar el enlace con "y". Lo más tremendo es que puedo hasta seleccionar varias entradas con Tab y Shift-Tab y reproducir/copiarlos en el orden que las seleccioné.