From 0e2d387565cb03c41cef33b9ff01eac5a5cb9132 Mon Sep 17 00:00:00 2001 From: marcellus Date: Thu, 14 Sep 2023 22:26:17 +0200 Subject: update: general changes, read the diff --- lf/cleaner | 4 + lf/icons | 327 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lf/lfrc | 124 +++++++++++++++++++++++ lf/scope | 50 ++++++++++ 4 files changed, 505 insertions(+) create mode 100644 lf/cleaner create mode 100644 lf/icons create mode 100644 lf/lfrc create mode 100644 lf/scope (limited to 'lf') 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 $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 +map delete +map E extract +map C copyto +map M moveto +map push :mkdir +map reload +map set hidden! +map 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 # new rename +map I push A # at the very beginning +map i push A # before extension +map a push A # after extension +map w $env IGNORE="" randwp "$f" + +map down +map up +map V push :!nvim + +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 -- cgit v1.2.3