move lf configuration and use upstream
This commit is contained in:
parent
67cb4995f9
commit
f3685dcbf5
5 changed files with 156 additions and 165 deletions
|
|
@ -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];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
118
home/default.nix
118
home/default.nix
|
|
@ -25,7 +25,7 @@ let
|
||||||
glow = "${pkgs.glow}/bin/glow";
|
glow = "${pkgs.glow}/bin/glow";
|
||||||
ffmpegthumbnailer = "${pkgs.ffmpegthumbnailer}/bin/ffmpegthumbnailer";
|
ffmpegthumbnailer = "${pkgs.ffmpegthumbnailer}/bin/ffmpegthumbnailer";
|
||||||
};
|
};
|
||||||
lf-sixel = pkgs.callPackage ../custom/lf-sixel/. {};
|
# lf-sixel = pkgs.callPackage ../custom/lf-sixel/. {};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./modules/terminal.nix
|
./modules/terminal.nix
|
||||||
|
|
@ -40,6 +40,7 @@ in {
|
||||||
./programs/scripts.nix
|
./programs/scripts.nix
|
||||||
./programs/neovim/.
|
./programs/neovim/.
|
||||||
./programs/git.nix
|
./programs/git.nix
|
||||||
|
./programs/lf/.
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.home-manager.enable = true;
|
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";
|
home.file.".icons/default".source = "${pkgs.vanilla-dmz}/share/icons/Vanilla-DMZ";
|
||||||
|
|
||||||
programs.helix = {
|
programs.helix = {
|
||||||
|
|
|
||||||
22
home/programs/lf/bulk-rename.sh
Normal file
22
home/programs/lf/bulk-rename.sh
Normal 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"
|
||||||
49
home/programs/lf/default.nix
Normal file
49
home/programs/lf/default.nix
Normal 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
83
home/programs/lf/preview.sh
Executable 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue