set icons
set scrolloff 3
set ratios 1:4:3
set period 1
set ifs "\n"
set info size
set previewer ~/.local/bin/scope
set mouse true
set drawbox true
set sixel true

# Custom commands

cmd on-cd &{{
    # '&' commands run silently in background (which is what we want here),
    # but are not connected to stdout.
    # To make sure our escape sequence still reaches stdout we pipe it to /dev/tty
    printf "\033]0; lf - $PWD\007" > /dev/tty
}}

on-cd

cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')"

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
}}

# compress current file or selected files with tar and gunzip
cmd tar ${{
    set -f
    mkdir $1
    cp -r $fx $1
    tar -czf $1.tar.gz $1
    rm -rf $1
}}

# extract the current file with the right command
cmd extract ${{
    set -f
    case $f in
        *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;;
        *.tar.gz|*.tgz) tar xzvf $f;;
        *.tar.xz|*.txz) tar xJvf $f;;
        *.zip) unzip $f;;
        *.rar) unrar x $f;;
        *.7z) 7z x $f;;
    esac
}}

# change dir with fzf
cmd fzf_jump ${{
	res="$(find . -type d | fzf --header='Jump to location')"
	if [ -d "$res" ]; then
	    cmd="cd"
	else 
	    cmd="select"                                                       
	fi
	lf -remote "send $id $cmd \"$res\""
}}

# open file with fzf
cmd fzf_open ${{
	res="$(find . -type d -path "*/\.*" -prune -o -not -name ".*" -type f | fzf)"
	if [ -e "$res" ]; then
	    setsid mimeo "$res" &
	fi
}}

# drag and drop prompt
cmd dragon $dragon-drop -a $fx

cmd dragon_drop $cp $(dragon-drop --target | sed 's/file:\/\///g') .

# copy path to clipboard
cmd yank-path &printf '%s' "$fx" | wl-copy

cmd open &mimeo $fx

cmd hard_link %{{
		load=$(cat ~/.local/share/lf/files)
		list=$(echo "$load" | sed '1d')
		ln $list .
}}

cmd soft_link %{{
		load=$(cat ~/.local/share/lf/files)
		list=$(echo "$load" | sed '1d')
		ln -s $list .
}}

cmd paste &{{
	set -- $(cat ~/.local/share/lf/files)
	mode="$1"
	shift
	case "$mode" in
		copy)
			rsync -rlDvh --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 -- "$@" .
			lf -remote "send $id clear"
			;;
	esac
	lf -remote "send $id reload"
}}

cmd archive &{{
	set -- $(cat ~/.local/share/lf/files)
	mode="$1"
	shift
	case "$mode" in
		copy)
			rsync -avhH --delete --progress -- "$@" . |
			stdbuf -i0 -o0 -e0 tr '\r' '\n' |
			while IFS= read -r line; do
				lf -remote "send $id echo $line"
			done
			;;
		move)
			rsync -avhH --delete --remove-source-files --progress -- "$@" . |
			stdbuf -i0 -o0 -e0 tr '\r' '\n' |
			while IFS= read -r line; do
				lf -remote "send $id echo $line"
			done
			lf -remote "send $id clear"
			;;
	esac
	lf -remote "send $id reload"
}}

# Bindings
map A rename
map c
map cc clear
map cd push :cd<space>
map cw push A<c-u> # rename from zero
map I push A<c-a> # rename from the beginning
map i push A<a-b><a-b><a-f> # rename before extention
map a push A<a-b> # rename after extention
map <c-n> push :mkdir<space>
map <c-t> push :$touch<space>
map <c-r> reload
map <enter> shell
map D delete
map <enter> shell
map f :fzf_jump
map o :fzf_open
map t :dragon
map T :dragon_drop
map W $setsid $TERMINAL > /dev/null 2>&1 & # open new terminal window
map Y :yank-path
map L $LESSOPEN='| ~/.local/bin/scope %s' less -r $f # open file preview in pager
map P hard_link
map <a-p> soft_link
map r archive

# Mouse bindings
map <m-3> :dragon