Move to gnu stow

This commit is contained in:
agryphus 2024-02-25 23:58:49 -05:00
parent cd08a447a8
commit 9ea93f8144
120 changed files with 994 additions and 53 deletions

4
misc/dot-config/lf/cleaner Executable file
View file

@ -0,0 +1,4 @@
#!/usr/bin/env sh
ueberzug cmd -s $UB_SOCKET -a remove -i PREVIEW

370
misc/dot-config/lf/icons Normal file
View file

@ -0,0 +1,370 @@
# vim:ft=conf
# These examples require Nerd Fonts or a compatible font to be used.
# See https://www.nerdfonts.com for more information.
# default values from lf (with matching order)
# ln l # LINK
# or l # ORPHAN
# tw t # STICKY_OTHER_WRITABLE
# ow d # OTHER_WRITABLE
# st t # STICKY
# di d # DIR
# pi p # FIFO
# so s # SOCK
# bd b # BLK
# cd c # CHR
# su u # SETUID
# sg g # SETGID
# ex x # EXEC
# fi - # FILE
# file types (with matching order)
ln  # LINK
or  # ORPHAN
tw t # STICKY_OTHER_WRITABLE
st t # STICKY
# ow  # OTHER_WRITABLE
# di  # DIR
# ow  # OTHER_WRITABLE
# di  # DIR
ow 󰝰 # OTHER_WRITABLE
di 󰝰 # DIR
pi p # FIFO
so 󰡂 # SOCK
bd b # BLK
cd c # CHR
su u # SETUID
sg g # SETGID
ex  # EXEC
fi  # FILE
# file extensions (vim-devicons)
*.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 
'*.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 󰡪
# file names (vim-devicons) (case-insensitive not supported in lf)
*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 󰚩
# file names (case-sensitive adaptations)
*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 
# file patterns (vim-devicons) (patterns not supported in lf)
# .*jquery.*\.js$ 
# .*angular.*\.js$ 
# .*backbone.*\.js$ 
# .*require.*\.js$ 
# .*materialize.*\.js$ 
# .*materialize.*\.css$ 
# .*mootools.*\.js$ 
# .*vimrc.* 
# Vagrantfile$ 
# file patterns (file name adaptations)
*jquery.min.js 
*angular.min.js 
*backbone.min.js 
*require.min.js 
*materialize.min.js 
*materialize.min.css 
*mootools.min.js 
*vimrc 
Vagrantfile 
# archives or compressed (extensions from dircolors defaults)
*.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 (extensions from dircolors defaults)
*.gif  # Lossless
*.bmp 
*.png 
*.tiff 
*.webp 
*.jpg  # Lossy
*.jpeg 
*.mjpg 
*.mjpeg 
*.pbm 
*.pgm 
*.ppm 
*.tga 
*.xbm 
*.xpm 
*.tif 
*.svg 
*.svgz 
*.mng 
*.pcx 
# Video formats
*.mov 
*.mpg 
*.mpeg 
*.m2v 
*.mkv 
*.webm 
*.ogm 
*.mp4 
*.m4v 
*.mp4v 
*.vob 
*.qt 
*.nuv 
*.wmv 
*.asf 
*.rm 
*.rmvb 
*.flc 
*.avi 
*.fli 
*.flv 
*.gl 
*.dl 
*.xcf 
*.xwd 
*.yuv 
*.cgm 
*.emf 
*.ogv 
*.ogx 
# audio formats (extensions from dircolors defaults)
*.aac 
*.au 
*.flac 
*.m4a 
*.mid 
*.midi 
*.mka 
*.mp3 
*.mpc 
*.ogg 
*.ra 
*.wav 
*.oga 
*.opus 
*.spx 
*.xspf 
# other formats
*.pdf 
*.tpy 󰙩
*.iso 
*.org 
*.ovpn 󰳌
*.txt 
*.pptx 󰈩
*.docx 
*.doc 
*.odt 
*.odg 󰽉
*.csv 
*.ics 
*.typ 󰙩

206
misc/dot-config/lf/lfrc Normal file
View file

@ -0,0 +1,206 @@
#!/usr/bin/env zsh
# https://github.com/gokcehan/lf/blob/master/doc.md
# ^ List of all options
## 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 info "size"
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 <c-r> reload
map <c-s> set hidden!
map <enter> shell
# Spawn new terminal/lf windows
map <a-enter> $setsid -f $TERMINAL -e $SHELL >/dev/null 2>&1 &
map <a-e> $setsid -f $TERMINAL -e $SHELL -c -i "lfcd && exec $SHELL" >/dev/null 2>&1 &
# Opening commands
map l open
map L open new_window
map o $mimeopen --ask "$f"
# CRUD commands
# map D delete
map D push :delete?<space>[y/N]:<space>
map N push :mkdir<space>
map n push :touch<space>
map x push :chmod<space>
map U push :extract?<space>[y/N]:<space>
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 r push A<c-u> # new rename
map i :rename # before extension
map I :rename; cmd-home # at the very beginning
map R drag-and-drop
# Fuzzy finding
map <c-f> $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 chmod %chmod $1 "$fx" && lf -remote "send $id reload"
cmd delete? ${{
[ -v 2 ] || exit 0 # Makes sure argument was passed in
[ ! "$2" = "y" ] && exit 0 # Exit if delete not confirmed
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? ${{
[ -v 2 ] || exit 0 # Makes sure argument was passed in
[ ! "$2" = "y" ] && exit 0 # Exit if delete not confirmed
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 {
[ -v WAYLAND_DISPLAY ] && swallower="swallow" || 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/*)
case "${f##*.}" in
org|typ)
# Any "document" like file ought to be in emacs
launch emacsclient -c "$fx"
exit
;;
esac
[ -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
}}

57
misc/dot-config/lf/previewer Executable file
View file

@ -0,0 +1,57 @@
#!/usr/bin/env sh
function sixel_compat() {
case "$TERM" in
"st-256color")
echo "y"
;;
*)
echo ""
;;
esac
}
image() {
chafa $([ -z "$(sixel_compat)" ] || echo "-f sixel") -s "$2x$3" --animate false "$1"
exit 1
}
CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))"
case "$(file --dereference --brief --mime-type -- "$1")" in
image/*)
image "$1" "$2" "$3" "$4" "$5" "$1"
;;
application/json|\
text/*|\
*/xml)
bat -p --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" && convert "$CACHE.jpg" -negate "$CACHE.jpg"
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
;;
application/*zip)
atool --list -- "$1"
;;
*opendocument*)
odt2txt "$1"
;;
application/pgp-encrypted) gpg -d -- "$1" ;;
*)
file -ibL "$1" | grep -q text && cat "$1" || file -Lb "$1"
;;
esac
exit 0