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
|
./gpg
|
||||||
./ncmpcpp
|
./ncmpcpp
|
||||||
./neovim
|
./neovim
|
||||||
./ranger
|
./joshuto
|
||||||
];
|
];
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
@ -68,7 +68,7 @@
|
|||||||
e = "exit";
|
e = "exit";
|
||||||
k = "kitty @ set-colors -c -a ~/.cache/wal/kitty";
|
k = "kitty @ set-colors -c -a ~/.cache/wal/kitty";
|
||||||
l = "ls -l";
|
l = "ls -l";
|
||||||
r = "ranger";
|
j = "joshuto";
|
||||||
w = "wal -o ~/.config/wal/done.sh";
|
w = "wal -o ~/.config/wal/done.sh";
|
||||||
T = "tree";
|
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