diff --git a/modules/home/programs/console/default.nix b/modules/home/programs/console/default.nix new file mode 100644 index 0000000..b99b283 --- /dev/null +++ b/modules/home/programs/console/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./joshuto.nix + ./yazi.nix + ]; +} diff --git a/modules/home/programs/console/joshuto.nix b/modules/home/programs/console/joshuto.nix new file mode 100644 index 0000000..08904c5 --- /dev/null +++ b/modules/home/programs/console/joshuto.nix @@ -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";}; + }; + }; + }; + }; +} diff --git a/modules/home/programs/default.nix b/modules/home/programs/default.nix index 4012abc..465c135 100644 --- a/modules/home/programs/default.nix +++ b/modules/home/programs/default.nix @@ -1,6 +1,6 @@ { imports = [ - ./console/yazi.nix + ./console ./editor ./shell ./terminal