nixrice/.config/lf/lfrc
2023-12-05 22:01:16 -05:00

172 lines
4.5 KiB
Fish

#!/usr/bin/env fish
# Not meant to actually be executable in fish, but it looks like lf config
# uses fish syntax, so the shebang helps treesitter highlighting properly
## LF VARS
set shellopts '-eu' # Treat undefined env vars as errors. Exit upon error.
set ifs "\n"
set scrolloff 10
set icons # Use icons
set period 1 # Poll directory status every X seconds
set sixel true
set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
set cleaner '~/.config/lf/cleaner' # Clear preview
set previewer '~/.config/lf/previewer' # Make preview
set autoquit true
## MAPPINGS
# LF control mappings
map <c-r> reload
map <c-s> set hidden!
map <enter> shell
# Opening commands
map l open
map L open new_window
map o $mimeopen --ask "$f"
# CRUD commands
map D delete
map N push :mkdir<space>
map n push :touch<space>
map u extract
map Y $printf "%s" "$fx" | xclip -selection clipboard
# Renaming commands
map A :rename; cmd-end # at the very end
map a :rename; cmd-right # after extension
map c push A<c-u> # new rename
map i :rename # before extension
map I :rename; cmd-home # at the very beginning
# Fuzzy finding
map <c-f> $lf -remote "send $id select \"$(fzf)\""
map F broot_jump
map b set_bg
## COMMAND DEFINITIONS
cmd touch %touch $1 && lf -remote "send $id load" && lf -remote "send $id select $1"
cmd mkdir %mkdir $1 && lf -remote "send $id load" && lf -remote "send $id select $1"
cmd delete ${{
clear; tput cup $(($(tput lines)/3)); tput bold
set -f
printf "%s\n\t" "$fx"
printf "delete?[y/N]"
read ans
[ $ans = "y" ] && rm -rf -- $fx
}}
cmd set_bg ${{
rm -f ~/.config/wallpaper
cp "$fx" ~/.config/wallpaper
if [ -z "$(pidof Hyprland)" ]; then
feh --bg-fill --no-fehbg "$HOME/.config/wallpaper"
else
swww img "$HOME/.config/wallpaper"
fi
}}
cmd extract ${{
clear; tput cup $(($(tput lines)/3)); tput bold
set -f
printf "%s\n\t" "$fx"
printf "extract?[y/N]"
read ans
[ ! $ans = "y" ] && exit 0
case $(file --mime-type "$(readlink -f $f)" -b) in
application/x-rar)
unrar x $fx
;;
*)
aunpack $fx
;;
esac
}}
cmd broot_jump ${{
f=$(mktemp)
res="$(broot --outcmd $f && cat $f | sed 's/cd //')"
rm -f "$f"
if [ -f "$res" ]; then
cmd="select"
elif [ -d "$res" ]; then
cmd="cd"
fi
lf -remote "send $id $cmd \"$res\""
}}
cmd open ${{
# Set $new_window based on arguments
[ ! -z $@ ] && [ "$@" = "new_window" ] && new_window=1
case $(file --mime-type "$(readlink -f $f)" -b) in
application/json|\
application/x-subrip|\
application/pgp-encrypted|\
inode/x-empty|\
text/*)
[ -v new_window ] \
&& ($TERMINAL -e $SHELL -c "$EDITOR \"$fx\"" >/dev/null 2>&1 &) \
|| ($EDITOR "$fx")
;;
audio/*|video/x-ms-asf)
mpv --audio-display=no $f ;;
video/*)
setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
application/epub*|\
application/octet-stream|\
application/pdf|\
application/postscript|\
application/vnd.djvu|\
image/vnd.djvu)
setsid -f $([ ! -v new_window ] && echo devour) zathura $fx >/dev/null 2>&1
;;
image/*)
find . -maxdepth 1 -type f -exec file -i {} \; |
grep -E 'image/.*' |
awk -F: '{ print substr($0, 1, length($0) - length($NF) - 1) }' |
rotdir $f |
setsid -f $([ ! -v new_window ] && echo devour) nsxiv -aio 2>/dev/null |
while read -r file; do
[ -z "$file" ] && continue
lf -remote "send select \"$file\""
lf -remote "send toggle"
done &
;;
application/msword|\
application/octet-stream|\
application/vnd.ms-powerpoint|\
application/vnd.oasis.opendocument.database|\
application/vnd.oasis.opendocument.formula|\
application/vnd.oasis.opendocument.graphics|\
application/vnd.oasis.opendocument.graphics-template|\
application/vnd.oasis.opendocument.presentation|\
application/vnd.oasis.opendocument.presentation-template|\
application/vnd.oasis.opendocument.spreadsheet|\
application/vnd.oasis.opendocument.spreadsheet-template|\
application/vnd.oasis.opendocument.text|\
application/vnd.openxmlformats-officedocument.presentationml.presentation|\
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|\
application/vnd.openxmlformats-officedocument.wordprocessingml.document)
setsid -f $([ ! -v new_window ] && echo devour) libreoffice $fx >/dev/null 2>&1
;;
*)
# test -v new_window \
# && () \
# || ()
;;
esac
}}
cmd open_new_window ${{
new_window=1 && cmd open
}}