1
0
Fork 0
dotfiles/.config/lf/lfrc
2024-02-22 14:51:47 +01:00

236 lines
6.8 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 # this is set in a function later
# 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 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 &{{
prompt="$(zsh -lc 'print -P $PS1')\033[33m%f\033[0m"
printf "%b" "\033]0;$(echo $prompt | sed 's/\[[0-9;]*m//g;s/» %f//g')\007" > /dev/tty
lf -remote "send $id set promptfmt \"$prompt\""
}}
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 -aP --del -- "$@" . |
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"
}}
on-cd
# Bindings
map <c-c>a fzfsearch
map <c-c>t fzftags
map <c-c>m fzfmarks
map <c-c>f fzfshortcut
map <c-c>g fzfgrep
map T trash
map <c-t> $trash-restore $PWD
map <c-d> &rm -rf -- $fx
map <c-e> extract
map P link
# map S share
map <c-g> lazygit
map <a-g> $gdu
map <c-v> pushedit
map <c-n> push :&mkdir<space>-p<space>
map N push :&touch<space>
map <c-r> reload
map <c-s> 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<c-u> # new rename
map B bulkrename
map b dupe
map u :clear; unselect
map n &echo $f | xclip -r -selection c
map <esc> 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"