dotfiles/lf/lfrc
Gabriel Arazas 0681d1fd7c Structure the project with NixOS-styled distros
It's been a while but I've been using NixOS (or anything styled like it
like GuixSD, for example) and distro-hopped from Arch Linux.
I think it's high noon for making the structure of this setup to be
truer to one of the big objectives which is how easy to transfer this
between different setups.
Which means I removed some things such as the package lists, systemd
config files, and package manager-specific configs.
While the solution is easy (which is to simply ignore the
system-specific files) but I'm not going with the pragmatic solution not
because I'm a dumbass but because I'm so smart that I want to create a
challenge for myself to solve a puzzle on figuring out a way on how to
structure my dotfiles. :)

Such a productive use of my time, that's for sure.
2020-09-11 03:12:26 +08:00

146 lines
3.5 KiB
Plaintext
Executable File

# Configuration for lf (https://github.com/gokcehan/lf).
# Based on the given example configuration at https://github.com/gokcehan/lf/blob/master/etc/lfrc.example.
# https://godoc.org/github.com/gokcehan/lf for documentation.
####################
# BEHAVIOR TOGGLES #
####################
# interpreter for shell commands (needs to be POSIX compatible)
set shell sh
# set '-eu' options for shell commands
# These options are used to have safer shell commands. Option '-e' is used to
# exit on error and option '-u' is used to give error for unset variables.
# Option '-f' disables pathname expansion which can be useful when $f, $fs, and
# $fx variables contain names with '*' or '?' characters. However, this option
# is used selectively within individual commands as it can be limiting at
# times.
set shellopts '-eu'
# set internal field separator (IFS) to "\n" for shell commands
# This is useful to automatically split file names in $fs and $fx properly
# since default file separator used in these variables (i.e. 'filesep' option)
# is newline. You need to consider the values of these options and create your
# commands accordingly.
set ifs "\n"
# toggle hidden files
set hidden
set color256
set timefmt "2006-01-02 15:04:05"
set dircounts
# leave some space at the top and the bottom of the screen
set scrolloff 10
############
# COMMANDS #
############
# define a custom 'open' command
# This command is called when current file is not a directory. You may want to
# use either file extensions and/or mime types here. Below uses an editor for
# text files and a file opener for the rest.
cmd open ${{
case $(file --mime-type $f -b) in
image/svg+xml) inkscape $fx;;
image/*) sxiv $fx;;
text/*) $EDITOR $fx;;
video/*) mpv $fx;;
*) for f in $fx; do setsid $OPENER $f > /dev/null 2> /dev/null & done;;
esac
}}
# define a custom 'rename' command without prompt for overwrite
cmd rename %[ -e $1 ] && printf "file exists" || mv $f $1
# move current file or selected files to trash folder
# (also see 'man mv' for backup/overwrite options)
cmd trash %set -f; mv $fx ~/.trash
# define a custom 'delete' command
cmd delete ${{
set -f
printf "$fx\n"
printf "delete?[y/n]"
read ans
[ $ans = "y" ] && rm -rf $fx
}}
# extract the current file with the right command
# (xkcd link: https://xkcd.com/1168/)
cmd extract ${{
set -f
case $f in
*.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;;
*.tar.gz|*.tgz) tar xzvf $f;;
*.tar.xz|*.txz) tar xJvf $f;;
*.zip) unzip $f;;
*.rar) unrar x $f;;
*.7z) 7z x $f;;
esac
}}
# compress current file or selected files with tar and gunzip
cmd tar ${{
set -f
mkdir $1
cp -r $fx $1
tar czf $1.tar.gz $1
rm -rf $1
}}
# compress current file or selected files with zip
cmd zip ${{
set -f
mkdir $1
cp -r $fx $1
zip -r $1.zip $1
rm -rf $1
}}
############
# MAPPINGS #
############
# file operations
map D delete
map <delete> delete
map r push :rename<space>
# use enter for shell commands
map <enter> shell
# go to usual directories
map gr cd /run/media
map g/ cd /
# execute current file (must be executable)
map x $$f
map X !$f
# dedicated keys for file opener actions
map oo open $f
map oO open --ask $f
# dedicated keys for usual application suite
# feel free to replace this accordingly to your needs
map oz !nvim $f
map ox !code $f
map oc !inkscape $f
map ov !gimp $f
map ob !blender $f
map of !firefox $f