192 lines
5.1 KiB
Nix
192 lines
5.1 KiB
Nix
{ config, pkgs, ... }:
|
|
{
|
|
programs.lf = {
|
|
enable = true;
|
|
commands = {
|
|
trash = ''''${{
|
|
set -f
|
|
${pkgs.trash-cli}/bin/trash $fx
|
|
}}'';
|
|
extract = ''''${{
|
|
set -f
|
|
${pkgs.dtrx}/bin/dtrx -n $fx
|
|
}}'';
|
|
compress_gzip = ''''${{
|
|
set -f
|
|
${pkgs.gnutar}/bin/tar Oc $(realpath --relative-to $PWD $f) | \
|
|
${pkgs.pigz}/bin/pigz -cv - > $f.tar.gz
|
|
}}'';
|
|
compress_zip = ''''${{
|
|
set -f
|
|
${pkgs.zip}/bin/zip -r $f.zip $(realpath --relative-to $PWD $f)
|
|
}}'';
|
|
compress_xz = ''''${{
|
|
set -f
|
|
${pkgs.gnutar}/bin/tar Oc $(realpath --relative-to $PWD $f) | \
|
|
${pkgs.pxz}/bin/pxz -cv - > $f.tar.xz
|
|
}}'';
|
|
compress_bzip2 = ''''${{
|
|
set -f
|
|
${pkgs.gnutar}/bin/tar Oc $(realpath --relative-to $PWD $f) | \
|
|
${pkgs.pbzip2}/bin/pbzip2 -cv - > $f.tar.bz2
|
|
}}'';
|
|
compress_zstd = ''''${{
|
|
set -f
|
|
${pkgs.gnutar}/bin/tar --zstd -cvf $f.tar.zst $(realpath --relative-to $PWD $f)
|
|
}}'';
|
|
compress_just_tar = ''''${{
|
|
set -f
|
|
${pkgs.gnutar}/bin/tar -cvf $f.tar $(realpath --relative-to $PWD $f)
|
|
}}'';
|
|
show_size = ''%{{
|
|
set -f
|
|
${pkgs.coreutils}/bin/du -sh $f
|
|
}}'';
|
|
ncdu = ''''${{
|
|
set -f
|
|
${pkgs.ncdu}/bin/ncdu $f
|
|
}}'';
|
|
# find = ''''${{
|
|
# set -f
|
|
# read -p
|
|
toggle_preview = ''%{{
|
|
if [ "$lf_preview" = "true" ]; then
|
|
lf -remote "send $id :set preview false; set ratios 1:5"
|
|
else
|
|
lf -remote "send $id :set preview true; set ratios 1:2:3"
|
|
fi
|
|
}}
|
|
'';
|
|
paste = ''&{{
|
|
set -- $(cat ~/.local/share/lf/files)
|
|
mode="$1"
|
|
shift
|
|
case "$mode" in
|
|
copy)
|
|
rsync -ah --ignore-existing --info=progress2 --no-inc-recursive -- "$@" . |
|
|
stdbuf -i0 -o0 -e0 tr '\r' '\n' |
|
|
while IFS= read -r line; do
|
|
lf -remote "send $id echo $line"
|
|
done
|
|
;;
|
|
move) mv -n -- "$@" .;;
|
|
esac
|
|
rm ~/.local/share/lf/files
|
|
lf -remote "send clear"
|
|
}}'';
|
|
bulk-rename = ''''${{
|
|
old="$(mktemp)"
|
|
new="$(mktemp)"
|
|
if [ -n "$fs" ]; then
|
|
fs="$(basename -a $fs)"
|
|
else
|
|
fs="$(ls -a)"
|
|
fi
|
|
printf '%s\n' "$fs" >"$old"
|
|
printf '%s\n' "$fs" >"$new"
|
|
$EDITOR "$new"
|
|
[ "$(wc -l < "$new")" -ne "$(wc -l < "$old")" ] && exit
|
|
paste "$old" "$new" | while IFS= read -r names; do
|
|
src="$(printf '%s' "$names" | cut -f1)"
|
|
dst="$(printf '%s' "$names" | cut -f2)"
|
|
if [ "$src" = "$dst" ] || [ -e "$dst" ]; then
|
|
continue
|
|
fi
|
|
mv -- "$src" "$dst"
|
|
done
|
|
rm -- "$old" "$new"
|
|
lf -remote "send $id unselect"
|
|
}}'';
|
|
alt-paste = ''&{{
|
|
if [ -n "$fs" ]; then
|
|
lf -remote "send $id $1; save-select"
|
|
fi
|
|
lf -remote "send $id paste"
|
|
}}'';
|
|
|
|
load-select = ''&{{
|
|
# skip if triggered via save-select from itself
|
|
if [ "$1" = "$id" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
lf -remote "send $id unselect"
|
|
if [ -s ~/.local/share/lf/select ]; then
|
|
files=$(tr '\n' '\0' < ~/.local/share/lf/select | xargs -0 printf ' %q')
|
|
lf -remote "send $id toggle $files"
|
|
fi
|
|
}}'';
|
|
|
|
save-select = ''&{{
|
|
printf "%s" "$fs" > ~/.local/share/lf/select
|
|
lf -remote "send load-select $id"
|
|
}}'';
|
|
|
|
follow_link = ''%{{
|
|
lf -remote "send ''${id} select '$(readlink $f)'"
|
|
}}'';
|
|
open_folder_in_sxiv = ''%{{
|
|
nsxiv .
|
|
}}'';
|
|
|
|
};
|
|
keybindings = {
|
|
D = "trash";
|
|
x = "extract";
|
|
Xg = "compress_gzip";
|
|
Xz = "compress_zip";
|
|
Xx = "compress_xz";
|
|
Xb = "compress_bzip2";
|
|
Xs = "compress_zstd";
|
|
Xt = "compress_just_tar";
|
|
as = "show_size";
|
|
an = "ncdu";
|
|
ar = "bulk-rename";
|
|
af = "follow_link";
|
|
ai = "open_folder_in_sxiv";
|
|
E = "$nvim";
|
|
p = "alt-paste copy";
|
|
P = "alt-paste cut";
|
|
"<space>" = ":toggle; down; save-select";
|
|
u = ":unselect; save-select";
|
|
v = ":invert; save-select";
|
|
"<tab>" = "toggle_preview";
|
|
};
|
|
|
|
# previewer.source = "${pkgs.pistol}/bin/pistol";
|
|
previewer.source = pkgs.writers.writeBash "pistol" ''
|
|
file=$1
|
|
w=$2
|
|
h=$3
|
|
x=$4
|
|
y=$5
|
|
|
|
if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then
|
|
kitty +kitten icat --silent --stdin no --transfer-mode file --place \
|
|
"''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty
|
|
exit 1
|
|
fi
|
|
|
|
${pkgs.pistol}/bin/pistol "$file"
|
|
'';
|
|
|
|
settings = {
|
|
icons = true;
|
|
ifs = "\\n";
|
|
cleaner =
|
|
let
|
|
cleaner = pkgs.writers.writeBash "cleaner" ''
|
|
kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty
|
|
'';
|
|
in
|
|
"${cleaner}";
|
|
};
|
|
|
|
extraConfig = ''
|
|
load-select
|
|
setlocal ${config.xdg.userDirs.download} sortby time
|
|
setlocal ${config.xdg.userDirs.download} reverse
|
|
setlocal ${config.xdg.userDirs.download} set info size:time
|
|
'';
|
|
};
|
|
}
|