# Basic Settings set shell zsh set shellopts '-eu:--shwordsplit' set ifs "\n" set scrolloff 5 set wrapscroll set sortby time set info size:time set reverse set incsearch set period 1 set color256 set preview set previewer lfview # All other settings need to go above this comment because reasons set icons %{{ w=$(tput cols) if [ $w -le 80 ]; then lf -remote "send $id set ratios 1:1" elif [ $w -le 160 ]; then lf -remote "send $id set ratios 2:2" else lf -remote "send $id set ratios 2:4" fi }} # Custom Functions cmd open ${{ case $(file --mime-type $f -bL) in text/*|application/json) vix "$f";; image/gif) setsid sxiv-gif $f 2>/dev/null & ;; image/*) setsid sxiv-rifle $f 2>/dev/null & ;; audio/*) mpv $f ;; video/*) setsid mpv $f -quiet >/dev/null 2>&1 & ;; font/ttf) fp -i $f -o /tmp/fontpreview.png & ;; application/x-7z-compressed|application/gz|application/rar|application/tar) atool --list --each -- "$f" | $PAGER ;; application/tar|application/tgz|application/xz|application/zip) atool --list --each -- "$f" | $PAGER ;; application/pdf|application/cbz|application/cbr|application/epub*) setsid zathura $fx >/dev/null 2>&1 & ;; *) for f in $fx; do setsid $OPENER $f > /dev/null 2>&1 & done;; esac }} cmd bulkrename ${{ old=$(mktemp) new=$(mktemp) [ -n $fs ] && fs=$(ls) printf "$fs\n" > $old printf "$fs\n" > $new $EDITOR $new [ $(cat $new | wc -l) -ne $(cat $old | wc -l) ] && exit paste $old $new | while read names; do src=$(printf $names | cut -f1) dst=$(printf $names | cut -f2) [ $src = $dst ] && continue [ -e $dst ] && continue mv $src $dst done rm $old $new lf -remote "send $id unselect" }} # insert cmd rename-insert &{{ if [ "$(echo "$fx" | wc -l)" -gt 1 ]; then lf -remote "send $id echo You can't change more than one file name" lf -remote "send $id unselect" else len="$(basename "$f" | wc -m)" # length of selected file/directory for i in $(seq "$len"); do pos="${pos}" # how many times do I have to press in order to get first char done lf -remote "send $id rename" lf -remote "send $id push $pos" fi }} # append before ext cmd rename-before-ext &{{ if [ "$(echo "$fx" | wc -l)" -gt 1 ]; then lf -remote "send $id echo You can't change more than one file name" lf -remote "send $id unselect" else if [ -d "$f" ]; then lf -remote "send $id rename" else ext_len="$(echo ${f##*.} | wc -m)" # extention length for i in $(seq "$ext_len"); do pos="${pos}" done lf -remote "send $id rename" lf -remote "send $id push "$pos"" fi fi }} # change its name entirely cmd rename-new &{{ if [ "$(echo "$fx" | wc -l)" -gt 1 ]; then lf -remote "send $id echo You can't change more than one file name" lf -remote "send $id unselect" else lf -remote "send $id rename" lf -remote "send $id push " fi }} cmd paste-rsync &{{ load=$(lf -remote 'load') mode=$(echo "$load" | sed -n '1p') list=$(echo "$load" | sed '1d') if [ $mode = 'copy']; then rsync -av --ignore-existing --progress $list . \ | stdbuf -i0 -o0 -e0 tr '\r' '\n' \ | while read line; do lf -remote "send $id echo $line" done elif [ $mode = 'move' ]; then mv -n $list . fi lf -remote 'send load' lf -remote 'send clear' }} cmd paste-append &{{ load=$(lf -remote 'load') mode=$(echo "$load" | sed -n '1p') list=$(echo "$load" | sed '1d') if [ $mode = 'copy' ]; then cp -rn $list . elif [ $mode = 'move' ]; then mv -n $list . fi lf -remote 'send load' lf -remote 'send clear' }} cmd paste-overwrite %{{ load=$(lf -remote 'load') mode=$(echo "$load" | sed -n '1p') list=$(echo "$load" | sed '1d') if [ $mode = 'copy' ]; then cp -r $list . elif [ $mode = 'move' ]; then mv $list . fi lf -remote 'send load' lf -remote 'send clear' }} cmd paste-interactive %{{ load=$(lf -remote 'load') mode=$(echo "$load" | sed -n '1p') list=$(echo "$load" | sed '1d') if [ $mode = 'copy' ]; then cp -r $list . elif [ $mode = 'move' ]; then mv $list . fi lf -remote 'send load' lf -remote 'send clear' }} cmd fzf_jump ${{ res="$(find . -maxdepth 3 -printf '%P\n' | fzf --reverse --header='Jump to location')" if [ -f "$res" ]; then cmd="select" elif [ -d "$res" ]; then cmd="cd" fi lf -remote "send $id $cmd \"$res\"" }} cmd Link %{{ lf -remote 'load' | while read file; do if [ ! -n "${mode+1}" ]; then mode="$file" continue fi files+=("$file") done if [ "${#files[@]}" -le 1 ]; then lf -remote "send $id echo no files to link" exit 0 fi # symbolicly copy mode is indicating a soft link if [[ "$mode" == copy ]]; then ln -sr $files -t . # while a move mode is indicating a hard link elif [[ "$mode" == move ]]; then ln $files -t . fi }} # toggle single column view cmd no_preview :{{ set nopreview set ratios 2 set info size:time map ~ yes_preview }} cmd yes_preview :{{ set ratios 2:2 set preview set info map ~ no_preview }} cmd newfold ${{ set -f read newd mkdir $newd mv $fx $newd }} # Bindings # Remove some defaults map "'" map '"' map m map n map d map p map w map y map c map / map r cmap cmd-escape map push A # new rename map cut map copy map reload map push $touch map push $mkdir map delete map paste map open map delete map . set hidden! map ~ no_preview map | top map ¿ bottom map R reload map x clear map dd cut map yy copy map yn ${{echo -n $(dirname $f) | xclip -selection clipboard}} map yp ${{echo -n $f | xclip -selection clipboard}} map yn ${{echo -n $(basename $f) | xclip -selection clipboard}} map pp paste map pa paste-append map po paste-overwrite map pi paste-interactive map pr paste-rsync map o &mimeopen $f map O $mimeopen --ask $f map cx $chmod +x "$f" map bg $setbg $f map U %du -sh $f map Y %cp -ri $fs . map D %mv -i $fs . map za $apack "$f".zip $f map zu $file-roller "$f" map zx $atool --each --extract "$f" map zg $hx add $fs map zn newfold map i push A # at the very beginning map A rename # at the very end map I push A. # before extension map a push A # after extension map B bulkrename map L :Link map f fzf_jump #goto dir map / $lf -remote "send $id select \"$(FZF_DEFAULT_COMMAND='fd --max-depth=1' fzf)\"" #local dir find map F $find | lf -remote "send $id select $(fzf --reverse --border --margin 2% --inline-info --color border:#005688,bg+:#16252E,fg+:#26c6da,hl+:#ffffff,hl:#26c6da)" #global find # Movement map gd cd ~/doc/ map gE cd /etc map gU cd /usr map ge cd ~/etc map g. cd ~/.config map gn cd ~/.config/nvim map gz cd ~/.config/zsh map gl cd ~/.local/share map gM cd /media map gm cd ~/snd/Albums map gr cd /mnt/remote map gc cd /mnt/cel map gb cd ~/.local/bin map gR cd / map gv cd ~/vid/Learning map gp cd ~/img map cg $$EDITOR ~/.config/lf/lfrc map sg source ~/.config/lf/lfrc