#!/usr/bin/env zsh ## 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 set cursorpreviewfmt "" # No cursor in the directory preview pane # set cursoractivefmt "\033[1m" set drawbox true ## MAPPINGS # LF control mappings map reload map set hidden! map 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 map n push :touch 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 # new rename map i :rename # before extension map I :rename; cmd-home # at the very beginning map r drag-and-drop # Fuzzy finding map $lf -remote "send $id select \"$(fzf)\"" map F broot_jump map b set_bg one map B set_bg all ## 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 ${{ if [ -z "$(pidof Hyprland)" ]; then rm -f ~/.config/wallpaper cp "$fx" ~/.config/wallpaper feh --bg-fill --no-fehbg "$HOME/.config/wallpaper" exit fi if [ "$1" = "all" ]; then swww img "$fx" else output="$(slurp -o -f "%o")" swww img "$fx" --outputs "$output" fi }} cmd drag-and-drop ${{ GKD_BACKEND=11 setsid -f dragon "$fx" >/dev/null 2>&1 }} 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 function launch { swallower="gobble" [ -z "$WAYLAND_DISPLAY" ] && swallower="devour" swallower="devour" if [ ! -v new_window ]; then $swallower "$@" >/dev/null 2>&1 else setsid -f "$@" >/dev/null 2>&1 fi } 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) launch mpv --audio-display=no "$f" ;; video/*) launch mpv -quiet "$f" ;; application/epub*|\ application/octet-stream|\ application/pdf|\ application/postscript|\ application/vnd.djvu|\ image/vnd.djvu) launch zathura "$fx" ;; 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 | launch nsxiv -aio | 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) launch libreoffice "$fx" ;; *) ;; esac }} cmd open_new_window ${{ new_window=1 && cmd open }}