forked from extern/nix-config
meta: Switch from ranger to joshuto
Joshuto is *significantly* faster than ranger and is written in Rust instead of Python. Although both ranger and joshuto have not seen a new release in a while, the future of joshuto seems more promising. Joshuto is additionally faster than lf and, similar to lf, does not hang when previewing images with kitty.
This commit is contained in:
parent
0fbd0e12e9
commit
d8914cb4d2
@ -7,7 +7,7 @@
|
||||
./gpg
|
||||
./ncmpcpp
|
||||
./neovim
|
||||
./ranger
|
||||
./joshuto
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
|
@ -68,7 +68,7 @@
|
||||
e = "exit";
|
||||
k = "kitty @ set-colors -c -a ~/.cache/wal/kitty";
|
||||
l = "ls -l";
|
||||
r = "ranger";
|
||||
j = "joshuto";
|
||||
w = "wal -o ~/.config/wal/done.sh";
|
||||
T = "tree";
|
||||
};
|
||||
|
28
terminal/joshuto/default.nix
Normal file
28
terminal/joshuto/default.nix
Normal file
@ -0,0 +1,28 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = [
|
||||
(pkgs.callPackage ./package {})
|
||||
];
|
||||
|
||||
home-manager.sharedModules = [{
|
||||
xdg.configFile."joshuto/joshuto.toml".text = ''
|
||||
[display]
|
||||
automatically_count_files = true
|
||||
show_borders = false
|
||||
show_hidden = true
|
||||
line_number_style = "absolute"
|
||||
collapse_preview = false
|
||||
|
||||
[preview]
|
||||
max_preview_size = 104857600
|
||||
preview_script = "~/.config/joshuto/preview.sh"
|
||||
preview_shown_hook_script = "~/.config/joshuto/kitty-show.sh"
|
||||
preview_removed_hook_script = "~/.config/joshuto/kitty-remove.sh"
|
||||
'';
|
||||
|
||||
xdg.configFile."joshuto/preview.sh".source = ./preview.sh;
|
||||
xdg.configFile."joshuto/kitty-show.sh".source = ./kitty-show.sh;
|
||||
xdg.configFile."joshuto/kitty-remove.sh".source = ./kitty-remove.sh;
|
||||
}];
|
||||
}
|
5
terminal/joshuto/kitty-remove.sh
Executable file
5
terminal/joshuto/kitty-remove.sh
Executable file
@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
kitty +kitten icat \
|
||||
--transfer-mode=file \
|
||||
--clear 2>/dev/null
|
32
terminal/joshuto/kitty-show.sh
Executable file
32
terminal/joshuto/kitty-show.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
FILE_PATH="$1" # Full path of the previewed file
|
||||
PREVIEW_X_COORD="$2" # x coordinate of upper left cell of preview area
|
||||
PREVIEW_Y_COORD="$3" # y coordinate of upper left cell of preview area
|
||||
PREVIEW_WIDTH="$4" # Width of the preview pane (number of fitting characters)
|
||||
PREVIEW_HEIGHT="$5" # Height of the preview pane (number of fitting characters)
|
||||
|
||||
TMP_FILE="$HOME/.cache/joshuto/thumbcache.png"
|
||||
|
||||
mimetype=$(file --mime-type -Lb "$FILE_PATH")
|
||||
|
||||
function image {
|
||||
kitty +kitten icat \
|
||||
--transfer-mode=file \
|
||||
--clear 2>/dev/null
|
||||
kitty +kitten icat \
|
||||
--transfer-mode=file \
|
||||
--place "${PREVIEW_WIDTH}x${PREVIEW_HEIGHT}@${PREVIEW_X_COORD}x${PREVIEW_Y_COORD}" \
|
||||
"$1" 2>/dev/null
|
||||
}
|
||||
|
||||
case "$mimetype" in
|
||||
image/*)
|
||||
image "${FILE_PATH}"
|
||||
;;
|
||||
*)
|
||||
kitty +kitten icat \
|
||||
--transfer-mode=file \
|
||||
--clear 2>/dev/null
|
||||
;;
|
||||
esac
|
22
terminal/joshuto/package/default.nix
Normal file
22
terminal/joshuto/package/default.nix
Normal file
@ -0,0 +1,22 @@
|
||||
{ lib, rustPlatform, fetchFromGitHub }:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "joshuto";
|
||||
version = "493af3185092036cbbae81ae620b101f66cf4e9a";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kamiyaa";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-jLlDMV03eFWDB1D6pFEq2MFAfoVwFTy8ZpweS9syDB0=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-dffKMgXhm4VpDSEzFW5d4oGCBKY/ppj1gx29Iw3Msc8=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Ranger-like terminal file manager written in Rust";
|
||||
homepage = "https://github.com/kamiyaa/joshuto";
|
||||
license = licenses.lgpl3Only;
|
||||
maintainers = with maintainers; [ figsoda totoroot ];
|
||||
};
|
||||
}
|
89
terminal/joshuto/preview.sh
Executable file
89
terminal/joshuto/preview.sh
Executable file
@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
IFS=$'\n'
|
||||
set -o noclobber -o noglob -o nounset -o pipefail
|
||||
|
||||
FILE_PATH=""
|
||||
PREVIEW_WIDTH=10
|
||||
PREVIEW_HEIGHT=10
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
"--path")
|
||||
shift
|
||||
FILE_PATH="$1"
|
||||
;;
|
||||
"--preview-width")
|
||||
shift
|
||||
PREVIEW_WIDTH="$1"
|
||||
;;
|
||||
"--preview-height")
|
||||
shift
|
||||
PREVIEW_HEIGHT="$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
realpath=$(realpath "$FILE_PATH")
|
||||
|
||||
handle_extension() {
|
||||
case "${FILE_EXTENSION_LOWER}" in
|
||||
rar)
|
||||
unrar lt -p- -- "${FILE_PATH}" && exit 0
|
||||
exit 1;;
|
||||
7z)
|
||||
7z l -p -- "${FILE_PATH}" && exit 0
|
||||
exit 1;;
|
||||
|
||||
pdf)
|
||||
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
|
||||
fmt -w "${PREVIEW_WIDTH}" && exit 0
|
||||
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
|
||||
fmt -w "${PREVIEW_WIDTH}" && exit 0
|
||||
exiftool "${FILE_PATH}" && exit 0
|
||||
exit 1;;
|
||||
|
||||
torrent)
|
||||
transmission-show -- "${FILE_PATH}" && exit 0
|
||||
exit 1;;
|
||||
|
||||
json)
|
||||
jq --color-output . "${FILE_PATH}" && exit 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
handle_mime() {
|
||||
local mimetype="${1}"
|
||||
|
||||
case "${mimetype}" in
|
||||
## Text
|
||||
text/* | */xml)
|
||||
bat --color=always --paging=never \
|
||||
--style=plain \
|
||||
--terminal-width="${PREVIEW_WIDTH}" \
|
||||
"${FILE_PATH}" && exit 0
|
||||
cat "${FILE_PATH}" && exit 0
|
||||
exit 1;;
|
||||
|
||||
## Image
|
||||
image/*)
|
||||
exit 5;;
|
||||
|
||||
## Video and audio
|
||||
video/* | audio/*)
|
||||
echo "$realpath"
|
||||
mediainfo "${FILE_PATH}" && exit 0
|
||||
exiftool "${FILE_PATH}" && exit 0
|
||||
exit 1;;
|
||||
esac
|
||||
}
|
||||
|
||||
FILE_EXTENSION="${FILE_PATH##*.}"
|
||||
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"
|
||||
handle_extension
|
||||
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
|
||||
handle_mime "${MIMETYPE}"
|
||||
|
||||
exit 1
|
@ -1,28 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = [ pkgs.ranger ];
|
||||
|
||||
home-manager.sharedModules = [{
|
||||
xdg.configFile."ranger/rc.conf".text = ''
|
||||
set line_numbers absolute
|
||||
set padding_right false
|
||||
set vcs_aware true
|
||||
set show_hidden true
|
||||
set confirm_on_delete always
|
||||
set save_console_history false
|
||||
set mouse_enabled false
|
||||
set tilde_in_titlebar true
|
||||
|
||||
alias r rename
|
||||
alias d delete
|
||||
|
||||
map DD shell trash %s
|
||||
|
||||
set use_preview_script true
|
||||
set preview_files true
|
||||
set preview_images true
|
||||
set preview_images_method kitty
|
||||
'';
|
||||
}];
|
||||
}
|
Loading…
Reference in New Issue
Block a user