summaryrefslogtreecommitdiff
path: root/lf
diff options
context:
space:
mode:
Diffstat (limited to 'lf')
-rw-r--r--lf/cleaner4
-rw-r--r--lf/icons327
-rw-r--r--lf/lfrc124
-rw-r--r--lf/scope50
4 files changed, 505 insertions, 0 deletions
diff --git a/lf/cleaner b/lf/cleaner
new file mode 100644
index 0000000..a184d84
--- /dev/null
+++ b/lf/cleaner
@@ -0,0 +1,4 @@
+#!/bin/sh
+if [ -n "$FIFO_UEBERZUG" ]; then
+ printf '{"action": "remove", "identifier": "PREVIEW"}\n' > "$FIFO_UEBERZUG"
+fi
diff --git a/lf/icons b/lf/icons
new file mode 100644
index 0000000..be94780
--- /dev/null
+++ b/lf/icons
@@ -0,0 +1,327 @@
+# vim:ft=conf
+
+# file types
+ln " " # LINK
+or " " # ORPHAN
+tw t # STICKY_OTHER_WRITABLE
+ow " " # OTHER_WRITABLE
+st t # STICKY
+di " " # DIR
+pi p # FIFO
+so s # SOCK
+bd b # BLK
+cd c # CHR
+su u # SETUID
+sg g # SETGID
+ex " " # EXEC
+fi " " # FILE
+
+# file extensions
+*.styl " "
+*.sass " "
+*.scss " "
+*.htm " "
+*.html " "
+*.slim " "
+*.haml " "
+*.ejs " "
+*.css " "
+*.less " "
+*.md " "
+*.mdx " "
+*.markdown " "
+*.rmd " "
+*.json " "
+*.webmanifest " "
+*.js " "
+*.mjs " "
+*.jsx " "
+*.rb " "
+*.gemspec " "
+*.rake " "
+*.php " "
+*.py " "
+*.pyc " "
+*.pyo " "
+*.pyd " "
+*.coffee " "
+*.mustache " "
+*.hbs " "
+*.conf " "
+*.ini " "
+*.yml " "
+*.yaml " "
+*.toml " "
+*.bat " "
+*.mk " "
+*.twig " "
+*.cpp " "
+*.c++ " "
+*.cxx " "
+*.cc " "
+*.cp " "
+*.c " "
+*.cs " "
+*.h " "
+*.hh " "
+*.hpp " "
+*.hxx " "
+*.hs " "
+*.lhs " "
+*.nix " "
+*.lua " "
+*.java " "
+*.sh " "
+*.fish " "
+*.bash " "
+*.zsh " "
+*.ksh " "
+*.csh " "
+*.awk " "
+*.ps1 " "
+*.ml "λ "
+*.mli "λ "
+*.diff " "
+*.db " "
+*.sql " "
+*.dump " "
+*.clj " "
+*.cljc " "
+*.cljs " "
+*.edn " "
+*.scala " "
+*.go " "
+*.dart " "
+*.xul " "
+*.sln " "
+*.suo " "
+*.pl " "
+*.pm " "
+*.t " "
+*.rss " "
+*.xml " "
+'*.f#' " "
+*.fsscript " "
+*.fsx " "
+*.fs " "
+*.fsi " "
+*.rs " "
+*.rlib " "
+*.d " "
+*.erl " "
+*.hrl " "
+*.ex " "
+*.exs " "
+*.eex " "
+*.leex " "
+*.heex " "
+*.vim " "
+*.ai " "
+*.psd " "
+*.psb " "
+*.ts " "
+*.tsx " "
+*.jl " "
+*.pp " "
+*.vue "﵂ "
+*.elm " "
+*.swift " "
+*.xcplayground " "
+*.tex "ﭨ "
+*.r "ﳒ "
+*.rproj "鉶 "
+*.sol "ﲹ "
+*.pem " "
+*.gpg " "
+*.pdf " "
+*.1 " "
+*.nfo " "
+*.info " "
+*.iso " "
+*.img " "
+*.part "󰋔 "
+*.torrent " "
+*.zig " "
+
+# file names
+*gruntfile.coffee " "
+*gruntfile.js " "
+*gruntfile.ls " "
+*gulpfile.coffee " "
+*gulpfile.js " "
+*gulpfile.ls " "
+*mix.lock " "
+*dropbox " "
+*.ds_store " "
+*.gitconfig " "
+*.gitignore " "
+*.gitattributes " "
+*.gitlab-ci.yml " "
+*.bashrc " "
+*.zshrc " "
+*.zshenv " "
+*.zprofile " "
+*.vimrc " "
+*.gvimrc " "
+*_vimrc " "
+*_gvimrc " "
+*.bashprofile " "
+*favicon.ico " "
+*license " "
+*node_modules " "
+*react.jsx " "
+*procfile " "
+*dockerfile " "
+*docker-compose.yml " "
+*rakefile " "
+*config.ru " "
+*gemfile " "
+*makefile " "
+*cmakelists.txt " "
+*robots.txt "ﮧ "
+*Gruntfile.coffee " "
+*Gruntfile.js " "
+*Gruntfile.ls " "
+*Gulpfile.coffee " "
+*Gulpfile.js " "
+*Gulpfile.ls " "
+*Dropbox " "
+*.DS_Store " "
+*LICENSE " "
+*React.jsx " "
+*Procfile " "
+*Dockerfile " "
+*Docker-compose.yml " "
+*Rakefile " "
+*Gemfile " "
+*Makefile " "
+*CMakeLists.txt " "
+*jquery.min.js " "
+*angular.min.js " "
+*backbone.min.js " "
+*require.min.js " "
+*materialize.min.js " "
+*materialize.min.css " "
+*mootools.min.js " "
+*vimrc " "
+*calendar " "
+*conf " "
+*config " "
+
+# archives or compressed
+*.tar " "
+*.tgz " "
+*.arc " "
+*.arj " "
+*.taz " "
+*.lha " "
+*.lz4 " "
+*.lzh " "
+*.lzma " "
+*.tlz " "
+*.txz " "
+*.tzo " "
+*.t7z " "
+*.zip " "
+*.z " "
+*.dz " "
+*.gz " "
+*.lrz " "
+*.lz " "
+*.lzo " "
+*.xz " "
+*.zst " "
+*.tzst " "
+*.bz2 " "
+*.bz " "
+*.tbz " "
+*.tbz2 " "
+*.tz " "
+*.deb " "
+*.rpm " "
+*.jar " "
+*.war " "
+*.ear " "
+*.sar " "
+*.rar " "
+*.alz " "
+*.ace " "
+*.zoo " "
+*.cpio " "
+*.7z " "
+*.rz " "
+*.cab " "
+*.wim " "
+*.swm " "
+*.dwm " "
+*.esd " "
+
+# image formats
+*.jpg " "
+*.jpeg " "
+*.mjpg " "
+*.gif " "
+*.ico " "
+*.bmp " "
+*.pbm " "
+*.pgm " "
+*.ppm " "
+*.tga " "
+*.xbm " "
+*.xpm " "
+*.tif " "
+*.tiff " "
+*.png " "
+*.svg " "
+*.svgz " "
+*.webp " "
+*.mng " "
+*.pcx " "
+*.flc " "
+*.fli " "
+*.xcf " "
+*.xwd " "
+*.cgm " "
+*.emf " "
+*.ff " "
+
+# video formats
+*.webm " "
+*.ogm " "
+*.mp4 " "
+*.m4v " "
+*.mp4v " "
+*.mkv " "
+*.mpg " "
+*.mpeg " "
+*.avi " "
+*.mov " "
+*.wmv " "
+*.flv " "
+*.m2v " "
+*.vob " "
+*.qt " "
+*.asf " "
+*.rm " "
+*.rmvb " "
+*.ogv " "
+*.ogx " "
+*.mjpeg " "
+
+# audio formats
+*.aac " "
+*.au " "
+*.flac " "
+*.m4a " "
+*.mid " "
+*.midi " "
+*.mka " "
+*.mp3 " "
+*.mpc " "
+*.ogg " "
+*.ra " "
+*.wav " "
+*.oga " "
+*.opus " "
+*.spx " "
+*.xspf " "
diff --git a/lf/lfrc b/lf/lfrc
new file mode 100644
index 0000000..0cc85f2
--- /dev/null
+++ b/lf/lfrc
@@ -0,0 +1,124 @@
+# Stolen from Luke Smith config
+# Note on Image Previews
+# For those wanting image previews, like this system, there are four steps to
+# set it up. These are done automatically for those that useed my Makefile users,
+# but I will state them here for others doing it manually.
+#
+# 1. ueberzug must be installed.
+# 2. The scope file (~/.local/etc/lf/scope for me), must have a command similar to
+# mine to generate ueberzug images.
+# 3. A `set cleaner` line as below is a cleaner script.
+# 4. lf should be started through a wrapper script (~/.local/bin/lfub for me)
+# that creates the environment for ueberzug. This command can be be aliased
+# in your shellrc (`alias lf="lfub") or if set to a binding, should be
+# called directly instead of normal lf.
+
+# Basic vars
+set shellopts '-eu'
+set ifs "\n"
+set scrolloff 10
+set icons
+set period 1
+set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
+set cleaner '~/.local/etc/lf/cleaner'
+set previewer '~/.local/etc/lf/scope'
+set autoquit true
+
+# cmds/functions
+cmd open ${{
+ case $(file --mime-type "$(readlink -f $f)" -b) in
+ image/vnd.djvu|application/pdf|application/octet-stream|application/postscript) setsid -f zathura $fx >/dev/null 2>&1 ;;
+ text/*|application/json|inode/x-empty|application/x-subrip) $EDITOR $fx;;
+ image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" |
+ setsid -f nsxiv -aio 2>/dev/null | while read -r file; do
+ [ -z "$file" ] && continue
+ lf -remote "send select \"$file\""
+ lf -remote "send toggle"
+ done & ;;
+ audio/*|video/x-ms-asf) mpv --audio-display=no $f ;;
+ video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
+ application/pdf|application/vnd.djvu|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;;
+ application/pgp-encrypted) $EDITOR $fx ;;
+ *) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done;;
+ esac
+}}
+
+cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')"
+
+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" ] && aunpack $fx
+}}
+
+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 moveto ${{
+ clear; tput cup $(($(tput lines)/3)); tput bold
+ set -f
+ clear; echo "Move to where?"
+ dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" &&
+ for x in $fx; do
+ eval mv -iv \"$x\" \"$dest\"
+ done &&
+ notify-send "File(s) moved to $dest."
+}}
+
+cmd copyto ${{
+ clear; tput cup $(($(tput lines)/3)); tput bold
+ set -f
+ clear; echo "Copy to where?"
+ dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" &&
+ for x in $fx; do
+ eval cp -ivr \"$x\" \"$dest\"
+ done &&
+ notify-send "File(s) copies to $dest."
+}}
+
+cmd q quit
+
+# Bindings
+map <c-f> $lf -remote "send $id select \"$(fzf)\""
+map J $lf -remote "send $id cd $(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf)"
+map gh
+map g top
+map d
+map D delete
+map <delete> delete
+map <backspace2> delete
+map E extract
+map C copyto
+map M moveto
+map <c-n> push :mkdir<space>
+map <c-r> reload
+map <c-s> set hidden!
+map <enter> shell
+map x $$f
+map X !$f
+map o &mimeopen "$f"
+map O $mimeopen --ask "$f"
+
+map A rename # at the very end
+map c push A<c-u> # new rename
+map I push A<c-a> # at the very beginning
+map i push A<a-b><a-b><a-f> # before extension
+map a push A<a-b> # after extension
+map w $env IGNORE="" randwp "$f"
+
+map <c-e> down
+map <c-y> up
+map V push :!nvim<space>
+
+map W $setsid -f $TERMINAL >/dev/null 2>&1
+
+map Y $printf "%s" "$fx" | xclip -selection clipboard
diff --git a/lf/scope b/lf/scope
new file mode 100644
index 0000000..bcefeab
--- /dev/null
+++ b/lf/scope
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# File preview handler for lf.
+
+set -C -f
+IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"
+THEME=gruvbox-dark
+
+image() {
+ if [ -f "$1" ] && [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1; then
+ printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$4" "$5" "$(($2-1))" "$(($3-1))" "$1" > "$FIFO_UEBERZUG"
+ else
+ mediainfo "$6"
+ fi
+}
+
+ifub() {
+ [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1
+}
+
+# Note that the cache file name is a function of file information, meaning if
+# an image appears in multiple places across the machine, it will not have to
+# be regenerated once seen.
+
+case "$(file --dereference --brief --mime-type -- "$1")" in
+ image/*) image "$1" "$2" "$3" "$4" "$5" "$1" ;;
+ text/html) w3m -dump "$1" ;; # lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
+ text/troff) man ./ "$1" | col -b ;;
+ text/* | */xml | application/json) bat --theme=$THEME --terminal-width "$(($4-2))" -f "$1" ;;
+ audio/* | application/octet-stream) mediainfo "$1" || exit 1 ;;
+ video/* )
+ CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
+ [ ! -f "$CACHE" ] && ffmpegthumbnailer -i "$1" -o "$CACHE" -s 0
+ image "$CACHE" "$2" "$3" "$4" "$5" "$1"
+ ;;
+ */pdf)
+ CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
+ [ ! -f "$CACHE.jpg" ] && pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
+ image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
+ ;;
+ */epub+zip|*/mobi*)
+ CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
+ [ ! -f "$CACHE.jpg" ] && gnome-epub-thumbnailer "$1" "$CACHE.jpg"
+ image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
+ ;;
+ application/*zip) atool --list -- "$1" ;;
+ *opendocument*) odt2txt "$1" ;;
+ application/pgp-encrypted) gpg -d -- "$1" ;;
+esac
+exit 1