Compare commits

...

2 commits

Author SHA1 Message Date
f9b97ed30b
add ytfp (youtube search script) 2026-04-09 10:44:42 -04:00
600d3ddb51
configure fzf 2026-04-09 10:44:39 -04:00
2 changed files with 76 additions and 2 deletions

View file

@ -1,7 +1,6 @@
{
config,
pkgs,
lib,
...
}:
{
@ -10,6 +9,7 @@
./fish.nix
./kitty.nix
./neovim.nix
./ytfp.nix
];
home.packages = with pkgs; [
@ -20,7 +20,6 @@
wget
ripgrep
ncdu
fzf
wl-clipboard
rclone
waypipe
@ -78,5 +77,30 @@
enableFishIntegration = true;
};
lazysql.enable = true;
fzf = {
enable = true;
enableFishIntegration = true;
defaultOptions = [
"--height 40%"
"--border"
];
colors = with config.scheme.withHashtag; {
bg = base00;
"bg+" = base01;
border = base03;
fg = base05;
"fg+" = base05;
header = base08;
hl = base08;
"hl+" = base08;
info = config.scheme.withHashtag.${config.colors.accent};
label = base05;
marker = base07;
pointer = base06;
prompt = config.scheme.withHashtag.${config.colors.accent};
"selected-bg" = base02;
spinner = base06;
};
};
};
}

View file

@ -0,0 +1,50 @@
# full credit to u/SupermarketAntique32 on reddit:
# https://www.reddit.com/r/commandline/comments/1sd26he/youtube_search_and_play_in_20_lines_of_bash/
{
pkgs,
...
}:
{
home.packages = with pkgs; [
(writeShellApplication {
name = "ytfp";
runtimeInputs = [
bash
curl
fzf
yt-dlp
chafa
mpv
];
text = ''
#!/usr/bin/env bash
#
# `ytfp`: Search YouTube video using `fzf` and play it in `mpv`
# Require `fzf`, `yt-dlp`, `chafa`, `mpv`
#
SEARCH_VID() {
yt-dlp "https://www.youtube.com/results?search_query=$1" \
--flat-playlist --playlist-items 1:20 --print \
$'%(thumbnails.0.url)s\t%(title)s\t%(channel)s\t%(view_count)s\t%(url)s' \
| grep --extended-regexp --invert-match 'playlist|channel'
}
RENDER_VID_INFO() {
curl --silent "$1" | chafa --size=x14 --clear
echo "Title : $2"
echo "Channel : $3"
echo "Views : $4"
}
export -f SEARCH_VID RENDER_VID_INFO
fzf --preview-window down --layout reverse --disabled --with-shell 'bash -c' \
--bind 'start:reload:SEARCH_VID fzf' \
--bind 'change:reload:sleep 0.3; SEARCH_VID {q} || true' \
--bind 'load:first' \
--delimiter '\t' --with-nth 2 \
--preview 'RENDER_VID_INFO {1} {2} {3} {4}' \
--bind 'enter:execute-silent(mpv {5})'
'';
})
];
}