add joshuto file manager

Signed-off-by: unexplrd <unexplrd@linerds.us>
This commit is contained in:
2025-03-31 16:35:36 +03:00
parent 9f9479b576
commit 386d3f9007
3 changed files with 299 additions and 1 deletions

View File

@ -0,0 +1,6 @@
{
imports = [
./joshuto.nix
./yazi.nix
];
}

View File

@ -0,0 +1,292 @@
{
pkgs,
config,
lib,
...
}:
with lib; let
cfg = config.console.joshuto;
in {
options = {
console.joshuto.enable =
mkEnableOption "enable joshuto file manager";
};
config =
# let
# test = pkgs.writeShellApplication {
# name = "upgrade";
# text = ''
# IFS=$'\n'
# # Security measures:
# # * noclobber prevents you from overwriting a file with `>`
# # * noglob prevents expansion of wild cards
# # * nounset causes bash to fail if an undeclared variable is used (e.g. typos)
# # * pipefail causes a pipeline to fail also if a command other than the last one fails
# set -o noclobber -o noglob -o nounset -o pipefail
# # Enable exiftool large file support
# shopt -s expand_aliases
# alias exiftool='exiftool -api largefilesupport=1'
# 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
# handle_extension() {
# case "\$\{FILE_EXTENSION_LOWER}" in
# ## Archive
# a | ace | alz | arc | arj | bz | bz2 | cab | cpio | deb | gz | jar | lha | lz | lzh | lzma | lzo | \
# rpm | rz | t7z | tar | tbz | tbz2 | tgz | tlz | txz | tZ | tzo | war | xpi | xz | Z | zip)
# atool --list -- "\$\{FILE_PATH}" && exit 0
# bsdtar --list --file "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# rar)
# ## Avoid password prompt by providing empty password
# unrar lt -p- -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# 7z)
# ## Avoid password prompt by providing empty password
# 7z l -p -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## PDF
# pdf)
# ## Preview as text conversion
# 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
# ;;
# ## BitTorrent
# torrent)
# transmission-show -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## OpenDocument
# odt | sxw)
# ## Preview as text conversion
# odt2txt "\$\{FILE_PATH}" && exit 0
# ## Preview as markdown conversion
# pandoc -s -t markdown -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ods | odp)
# ## Preview as text conversion (unsupported by pandoc for markdown)
# odt2txt "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## XLSX
# xlsx)
# ## Preview as csv conversion
# ## Uses: https://github.com/dilshod/xlsx2csv
# xlsx2csv -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## HTML
# htm | html | xhtml)
# ## Preview as text conversion
# w3m -dump "\$\{FILE_PATH}" && exit 0
# lynx -dump -- "\$\{FILE_PATH}" && exit 0
# elinks -dump "\$\{FILE_PATH}" && exit 0
# pandoc -s -t markdown -- "\$\{FILE_PATH}" && exit 0
# bat --color=always --paging=never \
# --style=plain \
# --terminal-width="\$\{PREVIEW_WIDTH}" \
# "\$\{FILE_PATH}" && exit 0
# ;;
# ## JSON
# json | ipynb)
# jq --color-output . "\$\{FILE_PATH}" && exit 0
# python -m json.tool -- "\$\{FILE_PATH}" && exit 0
# bat --color=always --paging=never \
# --style=plain \
# --terminal-width="\$\{PREVIEW_WIDTH}" \
# "\$\{FILE_PATH}" && exit 0
# ;;
# ## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
# ## by file(1).
# dff | dsf | wv | wvc)
# mediainfo "\$\{FILE_PATH}" && exit 0
# exiftool "\$\{FILE_PATH}" && exit 0
# ;; # Continue with next handler on failure
# esac
# }
# handle_mime() {
# local mimetype="\$\{1}"
# case "\$\{mimetype}" in
# ## RTF and DOC
# text/rtf | *msword)
# ## Preview as text conversion
# ## note: catdoc does not always work for .doc files
# ## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
# catdoc -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## DOCX, ePub, FB2 (using markdown)
# ## You might want to remove "|epub" and/or "|fb2" below if you have
# ## uncommented other methods to preview those formats
# *wordprocessingml.document | */epub+zip | */x-fictionbook+xml)
# ## Preview as markdown conversion
# pandoc -s -t markdown -- "\$\{FILE_PATH}" | bat -l markdown \
# --color=always --paging=never \
# --style=plain \
# --terminal-width="\$\{PREVIEW_WIDTH}" && exit 0
# exit 1
# ;;
# ## E-mails
# message/rfc822)
# ## Parsing performed by mu: https://github.com/djcb/mu
# mu view -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## XLS
# *ms-excel)
# ## Preview as csv conversion
# ## xls2csv comes with catdoc:
# ## http://www.wagner.pp.ru/~vitus/software/catdoc/
# xls2csv -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## 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
# ;;
# ## DjVu
# image/vnd.djvu)
# ## Preview as text conversion (requires djvulibre)
# djvutxt "\$\{FILE_PATH}" | fmt -w "\$\{PREVIEW_WIDTH}" && exit 0
# exiftool "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## Image
# image/*)
# ## Preview as text conversion
# exiftool "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## Video and audio
# video/* | audio/*)
# 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
# '';
# };
# in
lib.mkIf cfg.enable {
home.packages = [pkgs.file];
programs.joshuto = {
enable = true;
settings = {
mouse_support = true;
focus_on_create = true;
use_trash = true;
watch_files = true;
xdg_open = true;
xdg_open_fork = true;
case_insensitive_ext = false;
# zoxide_update = true;
display = {
mode = "minimal";
show_icons = true;
column_ratio = [1 5 2];
};
preview = {
# preview_script = lib.getExe pkgs.pistol;
use_xdg_thumbs = true;
xdg_thumb_size = "xxlarge";
};
};
mimetype = {
class = {
text_default = [
{
command = "hx";
}
];
};
extension = {
build."inherit" = "text_default";
c."inherit" = "text_default";
cmake."inherit" = "text_default";
conf."inherit" = "text_default";
cpp."inherit" = "text_default";
css."inherit" = "text_default";
csv."inherit" = "text_default";
cu."inherit" = "text_default";
ebuild."inherit" = "text_default";
eex."inherit" = "text_default";
env."inherit" = "text_default";
ex."inherit" = "text_default";
exs."inherit" = "text_default";
go."inherit" = "text_default";
h."inherit" = "text_default";
hpp."inherit" = "text_default";
hs."inherit" = "text_default";
html."inherit" = "text_default";
ini."inherit" = "text_default";
java."inherit" = "text_default";
js."inherit" = "text_default";
json."inherit" = "text_default";
kt."inherit" = "text_default";
log."inherit" = "text_default";
lua."inherit" = "text_default";
md."inherit" = "text_default";
micro."inherit" = "text_default";
ninja."inherit" = "text_default";
nix."inherit" = "text_default";
norg."inherit" = "text_default";
org."inherit" = "text_default";
py."inherit" = "text_default";
rkt."inherit" = "text_default";
rs."inherit" = "text_default";
scss."inherit" = "text_default";
sh."inherit" = "text_default";
srt."inherit" = "text_default";
svelte."inherit" = "text_default";
toml."inherit" = "text_default";
tsx."inherit" = "text_default";
txt."inherit" = "text_default";
vim."inherit" = "text_default";
xml."inherit" = "text_default";
yaml."inherit" = "text_default";
yml."inherit" = "text_default";
};
mimetype = {
text = {"inherit" = "text_default";};
};
};
};
};
}