# Basic vars set ratios 1:2:5 set shellopts '-eu' set ifs "\n" set findlen 1 set scrolloff 10 set icons set wrapscroll set period 1 set cursorpreviewfmt "\033[7;90m" set promptfmt "\033[34;1m%u\033[36m@\033[34m%h \033[35m[\033[0;1m%d\033[35m]\033[32m » \033[33m%f\033[0m" # HACK: This is needed to trigger the opening function of the taolf nvim plugin cmd open ${{ set +u [ "$lf_user_multiedit" = "true" ] && { $EDITOR $fx; return; } $OPENER "$f" }} cmd pushedit %{{ echo "Open: " && read files echo echo $files | xargs touch lf -remote "send $id \$$OPENER $files send $id unselect" }} cmd open-with ${{ method=$(rifle -c $XDG_CONFIG_HOME/lf/rifle.conf -l $fx | fzf --header="Choose an application:" | cut -d':' -f1) rifle -c $XDG_CONFIG_HOME/lf/rifle.conf -p $method $fx }} cmd mkdir &mkdir -p "$(echo $* | tr ' ' '\ ')" cmd trash &{{ for f in $fx; do trash-put $f & done lf -remote "send load" }} cmd lazygit %{{ dir=$(dirname "$(realpath "${f:-_}")"}) if ! git --noglob-pathspecs -C $dir status >/dev/null 2>&1; then echo "Initialize git repo in '${dir}' [Y/n]:" && read yn && case $yn in "" | [Yy]*) git -C ${dir} init >/dev/null 2>&1; break ;; [Nn]*) ;; esac fi lf -remote "send $id \$cd '$dir' && lazygit" }} # y (select for copy) and P to paste soft-link # d (select for cut) and P to paste hard-link cmd link &{{ set -- $(cat ~/.local/share/lf/files) mode="$1" shift if [ "$#" -lt 1 ]; then lf -remote "send $id echo no files to link" exit 0 fi case "$mode" in # symbolically copy mode is indicating a soft link copy) ln -sr -t . -- "$@";; # while a move mode is indicating a hard link move) ln -t . -- "$@";; esac rm ~/.local/share/lf/files lf -remote "send clear" }} cmd bulkrename $vidir cmd on-cd &{{ printf "%b" "\033]0;$(zsh -c 'source $XDG_CONFIG_HOME/zsh/configs/autogenerated/hashes; print -Pn "$USER@$HOST [%3~]"') \007" > /dev/tty fmt="\033[34;1m%u\033[36m@\033[34m%h \033[35m[\033[0;1m$(zsh -c 'source $XDG_CONFIG_HOME/zsh/configs/autogenerated/hashes; print -Pn "%3~"')\033[35m]\033[32m » \033[33m%f\033[0m" lf -remote "send $id set promptfmt \"$fmt\"" }} on-cd cmd on-quit &printf "\033]0; $(echo $PWD | sed "s|$HOME|~|")\007" > /dev/tty cmd paste &{{ set -- $(cat ~/.local/share/lf/files) mode="$1" shift case "$mode" in copy) rsync -av --ignore-existing --progress -- "$@" . | stdbuf -i0 -o0 -e0 tr '\r' '\n' | while IFS= read -r line; do lf -remote "send $id echo $line" done ;; move) mv -n -- "$@" .;; esac rm ~/.local/share/lf/files lf -remote "send clear" }} cmd dupe &{{ for file in $fx; do find "$PWD" "$file" -maxdepth 0 | grep -oP '(?<=.\.~)\d+(?=~$)' | sort -n | tail -1 | ( ext=$(($(cat /dev/stdin)+1)) filedest="$(echo "$file" | sed 's/.~[[:digit:]]*~$//').~$ext~" cp -r "$file" "$filedest" ) done }} # cmd share $curl -F"file=@$fx" https://0x0.snaile.de | xclip -r -selection c cmd fzfsearch ${{ file="$(find -L $PWD | fzf --header="Searching Filenames")" [ -d $file ] && lf -remote "send $id cd $file" && return 0 [ -f $file ] && lf -remote "send $id select $file" }} cmd fzftags ${{ file="$(cat ${XDG_DATA_HOME:-$HOME/.local/share}/lf/tags | sed 's/:\*$//' | fzf --header="Searching Tags")" [ -d $file ] && lf -remote "send $id cd $file" && return 0 [ -f $file ] && lf -remote "send $id select $file" }} cmd fzfmarks ${{ file="$(cat ${XDG_DATA_HOME:-$HOME/.local/share}/lf/marks | sed 's/^.://' | fzf --header="Searching Marks")" [ -d $file ] && lf -remote "send $id cd $file" && return 0 [ -f $file ] && lf -remote "send $id select $file" }} cmd fzfshortcut ${{ file="$(cat ${XDG_CONFIG_HOME:-$HOME/.config}/lf/shortcutrc | cut -d '"' -f2 | fzf --header="Searching Shortcuts")" [ -d $file ] && lf -remote "send $id cd $file" && return 0 [ -f $file ] && lf -remote "send $id select $file" }} cmd fzfgrep ${{ set +ue RG_PREFIX="rg --hidden --column --line-number --no-heading --color=always --smart-case --follow " res="$( FZF_DEFAULT_COMMAND="$RG_PREFIX ''" \ fzf --bind "change:reload:$RG_PREFIX {q} || true" \ --ansi --layout=reverse --header 'Searching file contents' |\ grep -iv -e 'Trash/files' -e 'Trash/info' )" file="$(realpath "$(echo "$res" | cut -d':' -f1 | sed 's/\\/\\\\/g;s/"/\\"/g')")" row="$(echo "$res" | cut -d':' -f2)" column="$(echo "$res" | cut -d':' -f3)" if [ -n "$res" ]; then # shellcheck disable=2154 lf -remote "send $id select '$file'" if [ -n "$VIM" ]; then lf -remote "send $id open '$file'" elif { [ "$EDITOR" = "nvim" ] || [ "$EDITOR" = "vim" ]; } && [ -n "$EMBEDDED" ]; then lf -remote "send $id \$$EDITOR +'call cursor($row, $column)' -- $([ -n "$EMBEDDED" ] && echo "--") '$file'" else lf -remote "send $id \$$EDITOR '$file'" fi fi }} cmd extract ${{ for f in $fx; do aunpack "$f" done }} # TODO: Move this to zsh config # cmd fzfworkon ${{ # workon -n $(workon | fzf) # }} cmd set_previewer %{{ if [ "${1}" = "sixel" ]; then lf -remote "send $id :set sixel; set previewer ~/.config/lf/preview/sixel" echo 'Previewer set to sixel' elif [ "${1}" = "ueberzug" ]; then lf -remote "send $id :set cleaner ~/.config/lf/preview/clean; set previewer ~/.config/lf/preview/ueberzug" echo 'Previewer set to ueberzug' else lf -remote "send $id :set previewer ~/.config/lf/preview/chafa" echo 'Previewer set to chafa' fi }} # HACK: This is a dirty hack to have an lf terminal that I can "exit" out of into a shell cmd new_lf_term &{{ mapcmd='map q $sh -c "tmux; kill $id"' previewercmd="set_previewer $(basename "$lf_previewer")" $TERMINAL -e lfX -command "${previewercmd}; ${mapcmd}" }} &{{ set +u previewer=sixel [ -n "$TMUX" ] && previewer=ueberzug [ -n "$VIM" ] && previewer=chafa lf -remote "send $id set_previewer $previewer" }} # Bindings map a fzfsearch map t fzftags map m fzfmarks map f fzfshortcut map g fzfgrep map T trash map $trash-restore $PWD map &rm -rf -- $fx map extract map P link # map S share map lazygit map $gdu map pushedit map push :mkdir map N push :&touch map reload map set hidden! map x $$f map X !$f map o open-with map O $less $f map a :rename; cmd-home # rename from beginning map r :rename; cmd-end # rename from end map i :rename # before extension map c push r # new rename map B bulkrename map b dupe map u :clear; unselect map n &echo $f | xclip -r -selection c map quit map g/ cd "/" map W new_lf_term map e :set user_multiedit "true" ; open; set user_multiedit "false" map E $sudo -e $f map R $lf -remote "send $id :select \"$(readlink $f)\"" # Load bookmark shortcuts source "~/.config/lf/shortcutrc"