293 lines
11 KiB
Nix
293 lines
11 KiB
Nix
{
|
|
pkgs,
|
|
config,
|
|
lib,
|
|
...
|
|
}: let
|
|
inherit (lib) mkIf mkEnableOption;
|
|
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
|
|
mkIf cfg.enable {
|
|
home.packages = [pkgs.file];
|
|
programs.joshuto = {
|
|
enable = true; # file manager in rust
|
|
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 = 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";};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|