#!/bin/sh # Craig Jennings # fuzzy find settings and utilities, sourced by .profile # Set up fzf key bindings and fuzzy completion source <(fzf --zsh) ### SETTINGS export FZF_DEFAULT_OPTS='--height=70%' export FZF_DEFAULT_COMMAND='rg --files' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" export FZF_DEFAULT_COMMAND='rg --files --no-ignore-vcs --hidden' ### NAVIGATION # cdff - change directory find file # change to the directory where the file resides. cdff() { file=$(fzf +m -q "$1") dir=$(dirname "$file") cd "$dir" || exit } # CD to a directory with fzf cdd () { destdir=$(find "${1:-.}" -path '*/\.*' -prune \ -o -type d -print 2> /dev/null | fzf +m) && cd "$destdir" } ### SYSTEM ADMIN # Kill a process with fzf kp () { pid=$(ps -ef | sed 1d | eval "fzf ${FZF_DEFAULT_OPTS} -m --header='[kill:process]'" | awk '{print $2}') if [ "x$pid" != "x" ] then echo "$pid" | xargs kill -${1:-9} kp fi } # list available packages, show info in preview, and install selection yinstall() { yay -Slq | fzf --multi --preview 'yay -Si {1}' | xargs -ro yay -S --noconfirm } yinstall-skipverify() { yay -Slq | fzf --multi --preview 'yay -Si {1}' | xargs -ro yay -S --noconfirm --mflags --skipinteg } # list installed packages, show info in preview, and remove selection yrm() { yay -Qq | fzf --multi --preview 'yay -Qi {1}' | xargs -ro yay -Rns } # find-in-file - usage: fif fif() { if [ ! "$#" -gt 0 ]; then echo "Need a string to search for!"; return 1; fi rg --files-with-matches --no-messages "$1" | fzf --preview "highlight -O ansi -l {} 2> /dev/null | rg --colors 'match:bg:yellow' --ignore-case --pretty --context 10 '$1' || rg --ignore-case --pretty --context 10 '$1' {}" } ### CONVENIENCE # Find a book in the calibre library and open it in the default application. # previously: find ~/books \( -iname \*.epub -o -iname \*.pdf -o -iname \*.djvu \) | fzf | xargs emacs bk() { bkfile=$(find ~/sync/books/ \( -iname "*.pdf" -o -iname "*.epub" -o -iname "*.djvu" \) -print | fzf) if [ -n "$bkfile" ]; then xdg-open "$bkfile" & fi } # play the selected video in the sync/pomodoro directory with mpv pomo() { pomo=$(find ~/sync/pomodoro/ \( -iname "*.webm" -o -iname "*.mkv" \) -print | fzf) if [ -n "$pomo" ]; then mpv "$pomo" & fi } # play the selected song in the music directory with mpg123 song() { songfile=$(find ~/music/ \( -iname "*.flac" -o -iname "*.mp3" -o -iname "*.ogg" -o -iname "*.opus" \) -print | fzf) if [ -n "$songfile" ]; then mpv --no-video "$songfile" fi }