# 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 previewer "~/.config/lf/preview/chafa" 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" set opener=opener cmd pushedit %{{ echo "Open: " && read files if sh -c '[ -n "$VIM" ]'; then lf -remote "send $id vimopen $files" else lf -remote "send $id \$echo $files | xargs -or nvim +wa" fi lf -remote "send $id reload" }} cmd edit ${{ rifle -c "$XDG_CONFIG_HOME/lf/rifle.conf" -p 0 $fx # if sh -c "[ -n '\$VIM' ]"; then # lf -remote "send $id vimopen $fx" # else # lf -remote "send $id '\$echo $fx | xargs -or nvim +wa'" # fi }} 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 vimopen &{{ touch "$@" lf -remote "$( for f in "$@"; do printf "%b" "send $id toggle $f\n"; done printf "%b" "send $id select $f\n" printf "%b" "send $id open\n" printf "%b" "send $id unselect\n" )" }} 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 ${{ DIR=$(echo $PWD | sed "s|$HOME|~|") printf "\033]0; $DIR\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 ${{ RG_PREFIX="rg --hidden --column --line-number --no-heading --color=always --smart-case " 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="$(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 lf -remote "send $id select '$file'" if [ -n "$VIM" ]; then lf -remote "send $id open '$file'" elsif [ "$EDITOR" = "nvim" ] || [ "$EDITOR" = "vim" ]; then lf -remote "send $id \$$EDITOR '$file' +'call cursor($row, $column)'" 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" lf -remote "send $id set previewer ~/.config/lf/preview/sixel" lf -remote "send $id reload" echo 'Previewer set to sixel' elif [ "${1}" = "ueberzug" ]; then lf -remote "send $id set cleaner ~/.config/lf/preview/clean" lf -remote "send $id set previewer ~/.config/lf/preview/ueberzug" lf -remote "send $id reload" echo 'Previewer set to ueberzug' else lf -remote "send $id set previewer ~/.config/lf/preview/chafa" lf -remote "send $id reload" 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 $tmux' previewercmd="set_previewer $(basename "$lf_previewer")" $TERMINAL -e lf -command "${previewercmd}; ${mapcmd}" }} # 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 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 edit map E $sudo -e $f # Load bookmark shortcuts source "~/.config/lf/shortcutrc"