move lf configuration and use upstream

This commit is contained in:
Tristan 2024-01-05 22:02:50 +00:00
parent 67cb4995f9
commit f3685dcbf5
5 changed files with 156 additions and 165 deletions

View file

@ -1,49 +0,0 @@
{
lib,
stdenv,
buildGoModule,
fetchFromGitHub,
installShellFiles,
}:
buildGoModule rec {
pname = "lf";
version = "28-1";
src = fetchFromGitHub {
owner = "horriblename";
repo = "lf";
rev = "r${version}";
hash = "sha256-FBjvZueSh9+grdDrD8DTOlJb6GaCQuJhrsOXRwlpDSQ=";
};
vendorHash = "sha256-oIIyQbw42+B6T6Qn6nIV62Xr+8ms3tatfFI8ocYNr0A=";
nativeBuildInputs = [installShellFiles];
ldflags = ["-s" "-w" "-X main.gVersion=r${version}"];
# Force the use of the pure-go implementation of the os/user library.
# Relevant issue: https://github.com/gokcehan/lf/issues/191
tags = lib.optionals (!stdenv.isDarwin) ["osusergo"];
postInstall = ''
install -D --mode=444 lf.desktop $out/share/applications/lf.desktop
installManPage lf.1
installShellCompletion etc/lf.{bash,zsh,fish}
'';
meta = with lib; {
description = "A terminal file manager written in Go and heavily inspired by ranger";
longDescription = ''
lf (as in "list files") is a terminal file manager written in Go. It is
heavily inspired by ranger with some missing and extra features. Some of
the missing features are deliberately omitted since it is better if they
are handled by external tools.
'';
homepage = "https://godoc.org/github.com/gokcehan/lf";
changelog = "https://github.com/gokcehan/lf/releases/tag/r${version}";
license = licenses.mit;
platforms = platforms.unix;
maintainers = with maintainers; [dotlambda];
};
}

View file

@ -25,7 +25,7 @@ let
glow = "${pkgs.glow}/bin/glow";
ffmpegthumbnailer = "${pkgs.ffmpegthumbnailer}/bin/ffmpegthumbnailer";
};
lf-sixel = pkgs.callPackage ../custom/lf-sixel/. {};
# lf-sixel = pkgs.callPackage ../custom/lf-sixel/. {};
in {
imports = [
./modules/terminal.nix
@ -40,6 +40,7 @@ in {
./programs/scripts.nix
./programs/neovim/.
./programs/git.nix
./programs/lf/.
];
programs.home-manager.enable = true;
@ -98,121 +99,6 @@ in {
};
};
programs.lf.enable = true;
programs.lf.package = lf-sixel;
programs.lf.keybindings = {
D = "trash";
R = "drag";
"<f-2>" = ":rename";
"<enter>" = "open-with";
};
programs.lf.commands = {
drag = "%${pkgs.ripdrag}/bin/ripdrag -x \"$fx\"";
trash = "%${pkgs.trash-cli}/bin/trash-put \"$fx\"";
open = "$set -f; ${pkgs.ranger}/bin/rifle -p 0 \"$fx\"";
open-with = '' ''${{
set -f
${pkgs.ranger}/bin/rifle -l "$fx"
read -p "Open with: " method
${pkgs.ranger}/bin/rifle -p "$method" "$fx"
}}'';
bulk-rename = '' ''${{
old="$(mktemp)"
new="$(mktemp)"
if [ -n "$fs" ]; then
fs="$(basename -a $fs)"
else
fs="$(ls)"
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"
}}'';
};
programs.lf.previewer.source = pkgs.writeShellScript "preview" ''
image () {
echo "$1"
${my-deps.chafa} "$1" -f sixel -s "$(($2/2))x$3" | sed 's/#/\n#/g'
${my-deps.exiftool} "$1"
}
batted () {
cat "$@"
}
mkdir -p "$HOME/.cache/lf"
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 "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in
*.tgz|*.tar.gz) tar tzf "$1" ;;
*.tar.bz2|*.tbz2) tar tjf "$1" ;;
*.tar.txz|*.txz) xz --list "$1" ;;
*.tar) tar tf "$1" ;;
*.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;;
*.rar) unrar l "$1" ;;
*.md) ${my-deps.glow} -s dark "$1" ;;
*.7z) 7z l "$1" ;;
*.[1-8]) man "$1" | col -b ;;
*.o) nm "$1";;
*.torrent) transmission-show "$1" ;;
*.iso) iso-info --no-header -l "$1" ;;
*.odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;;
*.doc) catdoc "$1" ;;
*.docx) docx2txt "$1" - ;;
*.xml|*.html) w3m -dump "$1";;
*.xls|*.xlsx)
ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batted --language=csv
;;
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka)
${my-deps.exiftool} "$1"
;;
*.pdf)
[ ! -f "$CACHE.jpg" ] && \
pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.epub)
[ ! -f "$CACHE" ] && \
epub-thumbnailer "$1" "$CACHE" 1024
image "$CACHE" "$2" "$3" "$4" "$5"
;;
*.cbz|*.cbr|*.cbt)
[ ! -f "$CACHE" ] && \
comicthumb "$1" "$CACHE" 1024
image "$CACHE" "$2" "$3" "$4" "$5"
;;
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx)
[ ! -f "$CACHE.jpg" ] && \
${my-deps.ffmpegthumbnailer} -i "$1" -o "$CACHE.jpg" -s 0 -q 5
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.bmp|*.jpg|*.jpeg|*.png|*.xpm|*.webp|*.jfif)
image "$1" "$2" "$3" "$4" "$5"
;;
*.svg)
[ ! -f "$CACHE.jpg" ] && \
convert "$1" "$CACHE.jpg"
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.ino)
batted --language=cpp "$1"
;;
*)
batted "$1"
;;
esac
'';
home.file.".icons/default".source = "${pkgs.vanilla-dmz}/share/icons/Vanilla-DMZ";
programs.helix = {

View file

@ -0,0 +1,22 @@
old="$(mktemp)"
new="$(mktemp)"
if [ -n "$fs" ]; then
fs="$(basename -a $fs)"
else
fs="$(ls)"
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"

View file

@ -0,0 +1,49 @@
{pkgs, ...}: let
readScript = path: '' ''${{
${builtins.readFile path}
}}'';
in {
home.packages = with pkgs; [
# previewer
chafa
exiftool
bat
ffmpegthumbnailer
trash-cli
imagemagick
gnumeric
poppler_utils
odt2txt
python311Packages.docx2txt
catdoc
libcdio
p7zip
file
gnome-epub-thumbnailer
];
programs.lf.enable = true;
programs.lf.keybindings = {
D = "trash";
R = "drag";
"<f-2>" = ":rename";
"<enter>" = "open-with";
};
programs.lf.extraConfig = ''
set sixel true
'';
programs.lf.commands = {
drag = "%${pkgs.ripdrag}/bin/ripdrag -x \"$fx\"";
trash = "%trash-put \"$fx\"";
open = "$set -f; ${pkgs.ranger}/bin/rifle -p 0 \"$fx\"";
open-with = '' ''${{
set -f
${pkgs.ranger}/bin/rifle -l "$fx"
read -p "Open with: " method
${pkgs.ranger}/bin/rifle -p "$method" "$fx"
}}'';
bulk-rename = readScript ./bulk-rename.sh;
};
programs.lf.previewer.source = ./preview.sh;
}

83
home/programs/lf/preview.sh Executable file
View file

@ -0,0 +1,83 @@
#!/bin/sh
HASH=$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | md5sum $1 | cut -f 1 -d " ")
CACHEDIR=/tmp/lf/thumbnail/
mkdir -p $CACHEDIR
CACHE=$CACHEDIR/$HASH
image () {
[ ! -f "$CACHE" ] && \
chafa -f sixel -s "$2x$3" --animate off --polite on "$1" > "$CACHE"
cat "$CACHE"
}
case "$(file -Lb --mime-type -- "$1")" in
image/*)
image $@
exit 1
;;
text/*)
bat "$1"
;;
application/pdf)
[ ! -f "$CACHE.jpeg" ] && \
pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE.jpeg"
image "$CACHE.jpeg" "$2" "$3" "$4" "$5"
;;
*)
exiftool "$1"
;;
esac
exit
case "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in
*.tgz|*.tar.gz) tar tzf "$1" ;;
*.tar.bz2|*.tbz2) tar tjf "$1" ;;
*.tar.txz|*.txz) xz --list "$1" ;;
*.tar) tar tf "$1" ;;
*.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;;
*.md) glow -s dark "$1" ;;
*.7z) 7z l "$1" ;;
*.[1-8]) man "$1" | col -b ;;
*.o) nm "$1";;
*.torrent) transmission-show "$1" ;;
*.iso) iso-info --no-header -l "$1" ;;
*.odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;;
*.doc) catdoc "$1" ;;
*.docx) docx2txt "$1" - ;;
*.xml|*.html) w3m -dump "$1";;
*.xls|*.xlsx)
ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1"
;;
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka)
exiftool "$1"
;;
*.pdf)
[ ! -f "$CACHE.jpg" ] && \
pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.epub)
[ ! -f "$CACHE" ] && \
epub-thumbnailer "$1" "$CACHE" 1024
image "$CACHE" "$2" "$3" "$4" "$5"
;;
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx)
[ ! -f "$CACHE.jpg" ] && \
ffmpegthumbnailer -i "$1" -o "$CACHE.jpg" -s 0 -q 5
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.bmp|*.jpg|*.jpeg|*.png|*.xpm|*.webp|*.jfif)
image "$1" "$2" "$3" "$4" "$5"
;;
*.svg)
[ ! -f "$CACHE.jpg" ] && \
convert "$1" "$CACHE.jpg"
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*)
cat "$1"
;;
esac