diff --git a/hosts/froidmpa-laptop/default.nix b/hosts/froidmpa-laptop/default.nix index ddcce79..0220314 100644 --- a/hosts/froidmpa-laptop/default.nix +++ b/hosts/froidmpa-laptop/default.nix @@ -6,6 +6,7 @@ desktop = { xmonad.enable = true; alacritty.enable = true; + joshuto.enable = true; zsh.enable = true; vscode.enable = true; dunst.enable = true; diff --git a/hosts/nixos-desktop/default.nix b/hosts/nixos-desktop/default.nix index 94e1c43..9a66a79 100644 --- a/hosts/nixos-desktop/default.nix +++ b/hosts/nixos-desktop/default.nix @@ -6,6 +6,7 @@ desktop = { xmonad.enable = true; alacritty.enable = true; + joshuto.enable = true; zsh.enable = true; vscode.enable = true; dunst.enable = true; diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 6d8227e..a516655 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -89,94 +89,6 @@ in { enableZshIntegration = true; nix-direnv.enable = true; }; - joshuto = { - enable = true; - package = with pkgs; - writeShellScriptBin "joshuto" '' - export joshuto_wrap_id="$$" - export joshuto_wrap_tmp="$(mktemp -d -t joshuto-wrap-$joshuto_wrap_id-XXXXXX)" - export joshuto_wrap_preview_meta="$joshuto_wrap_tmp/preview-meta" - export ueberzug_pid_file="$joshuto_wrap_tmp/pid" - export ueberzug_img_identifier="preview" - export ueberzug_socket="" - export ueberzug_pid="" - - function start_ueberzugpp { - ## Adapt Überzug++ options here. For example, remove the '--no-opencv' or set another output method. - ${ueberzugpp}/bin/ueberzug layer --no-stdin --pid-file "$ueberzug_pid_file" --no-opencv &>/dev/null - export ueberzug_pid="$(cat "$ueberzug_pid_file")" - export ueberzug_socket=/tmp/ueberzugpp-"$ueberzug_pid".socket - mkdir -p "$joshuto_wrap_preview_meta" - } - - function stop_ueberzugpp { - remove_image - ${ueberzugpp}/bin/ueberzug cmd -s "$ueberzug_socket" -a exit - kill "$ueberzug_pid" - rm -rf "$joshuto_wrap_tmp" - } - - function show_image { - ${ueberzugpp}/bin/ueberzug cmd -s "$ueberzug_socket" -a add -i "$ueberzug_img_identifier" -x "$2" -y "$3" --max-width "$4" --max-height "$5" -f "$1" &>/dev/null - } - - function remove_image { - ${ueberzugpp}/bin/ueberzug cmd -s "$ueberzug_socket" -a remove -i "$ueberzug_img_identifier" &>/dev/null - } - - function get_preview_meta_file { - echo "$joshuto_wrap_preview_meta/$(echo "$1" | md5sum | sed 's/ //g')" - } - - export -f get_preview_meta_file - export -f show_image - export -f remove_image - - if [ -n "$DISPLAY" ] && command -v ${ueberzugpp}/bin/ueberzug > /dev/null; then - trap stop_ueberzugpp EXIT QUIT INT TERM - start_ueberzugpp - fi - - ${joshuto}/bin/joshuto "$@" - exit $? - ''; - settings = { - xdg_open = true; - xdg_open_fork = true; - display = { show_icons = true; }; - # preview.preview_protocol = "kitty"; - preview.preview_script = ./files/joshuo_preview_file.sh; - preview.preview_shown_hook_script = with pkgs; - writeScript "on_preview_shown" '' - #!/usr/bin/env bash - test -z "$joshuto_wrap_id" && exit 1; - - path="$1" # Full path of the previewed file - x="$2" # x coordinate of upper left cell of preview area - y="$3" # y coordinate of upper left cell of preview area - width="$4" # Width of the preview pane (number of fitting characters) - height="$5" # Height of the preview pane (number of fitting characters) - - # Find out mimetype and extension - mimetype=$(${file}/bin/file --mime-type -Lb "$path") - extension=$(echo "''${path##*.}" | awk '{print tolower($0)}') - - case "$mimetype" in - image/png | image/jpeg) - show_image "$path" $x $y $width $height - ;; - *) - remove_image - - esac - ''; - preview.preview_removed_hook_script = - pkgs.writeScript "on_preview_removed" '' - #!/usr/bin/env bash - test -z "$joshuto_wrap_id" && exit 1; - remove_image''; - }; - }; }; xdg.desktopEntries = { @@ -240,20 +152,6 @@ in { xorg.xwininfo xorg.xkill - # Joshuto preview utils - file - catdoc - pandoc - mu - djvulibre - exiftool - mediainfo - atool - gnutar - poppler_utils - libtransmission - w3m - brave keepassxc krita diff --git a/modules/desktop/files/joshuo_preview_file.sh b/modules/desktop/files/joshuto_preview_file.sh similarity index 99% rename from modules/desktop/files/joshuo_preview_file.sh rename to modules/desktop/files/joshuto_preview_file.sh index a30c7cf..ef267bb 100755 --- a/modules/desktop/files/joshuo_preview_file.sh +++ b/modules/desktop/files/joshuto_preview_file.sh @@ -1,5 +1,3 @@ -#!/usr/bin/env bash - ## This script is a template script for creating textual file previews in Joshuto. ## ## Copy this script to your Joshuto configuration directory and refer to this @@ -61,6 +59,7 @@ while [ "$#" -gt 0 ]; do ;; "--preview-height") shift + # shellcheck disable=SC2034 PREVIEW_HEIGHT="$1" ;; esac diff --git a/modules/desktop/files/joshuto_wrapper.sh b/modules/desktop/files/joshuto_wrapper.sh new file mode 100644 index 0000000..e907877 --- /dev/null +++ b/modules/desktop/files/joshuto_wrapper.sh @@ -0,0 +1,53 @@ +export joshuto_wrap_id="$$" +joshuto_wrap_tmp="$(mktemp -d -t joshuto-wrap-$joshuto_wrap_id-XXXXXX)" +export joshuto_wrap_tmp +export joshuto_wrap_preview_meta="$joshuto_wrap_tmp/preview-meta" +export ueberzug_pid_file="$joshuto_wrap_tmp/pid" +export ueberzug_img_identifier="preview" +export ueberzug_socket="" +export ueberzug_pid="" + +# shellcheck disable=SC2317 +function start_ueberzugpp { + ## Adapt Überzug++ options here. For example, remove the '--no-opencv' or set another output method. + ueberzug layer --no-stdin --pid-file "$ueberzug_pid_file" --no-opencv &>/dev/null + ueberzug_pid="$(cat "$ueberzug_pid_file")" + export ueberzug_pid + export ueberzug_socket=/tmp/ueberzugpp-"$ueberzug_pid".socket + mkdir -p "$joshuto_wrap_preview_meta" +} + +# shellcheck disable=SC2317 +function stop_ueberzugpp { + remove_image + ueberzug cmd -s "$ueberzug_socket" -a exit + kill "$ueberzug_pid" + rm -rf "$joshuto_wrap_tmp" +} + +# shellcheck disable=SC2317 +function show_image { + ueberzug cmd -s "$ueberzug_socket" -a add -i "$ueberzug_img_identifier" -x "$2" -y "$3" --max-width "$4" --max-height "$5" -f "$1" &>/dev/null +} + +# shellcheck disable=SC2317 +function remove_image { + ueberzug cmd -s "$ueberzug_socket" -a remove -i "$ueberzug_img_identifier" &>/dev/null +} + +# shellcheck disable=SC2317 +function get_preview_meta_file { + echo "$joshuto_wrap_preview_meta/$(echo "$1" | md5sum | sed 's/ //g')" +} + +export -f get_preview_meta_file +export -f show_image +export -f remove_image + +if [ -n "$DISPLAY" ] && command -v ueberzug > /dev/null; then + trap stop_ueberzugpp EXIT QUIT INT TERM + start_ueberzugpp +fi + +joshuto "$@" +exit $? diff --git a/modules/desktop/joshuto.nix b/modules/desktop/joshuto.nix new file mode 100644 index 0000000..270785a --- /dev/null +++ b/modules/desktop/joshuto.nix @@ -0,0 +1,74 @@ +{ config, lib, pkgs, ... }: + +with lib; +with lib.my; +let cfg = config.modules.desktop.joshuto; +in { + options.modules.desktop.joshuto = { enable = mkBoolOpt false; }; + config = mkIf cfg.enable { + home-manager.users.${config.user.name} = { + programs.joshuto = { + enable = true; + package = with pkgs; + writeShellApplication { + name = "joshuto"; + runtimeInputs = [ ueberzugpp joshuto ]; + text = builtins.readFile ./files/joshuto_wrapper.sh; + }; + settings = { + xdg_open = true; + xdg_open_fork = true; + display = { show_icons = true; }; + preview.preview_script = with pkgs; + "${writeShellApplication { + name = "joshuto-preview"; + runtimeInputs = [ + file + catdoc + pandoc + mu + djvulibre + exiftool + mediainfo + atool + gnutar + poppler_utils + libtransmission + w3m + ]; + text = builtins.readFile ./files/joshuto_preview_file.sh; + }}/bin/joshuto-preview"; + preview.preview_shown_hook_script = with pkgs; + writeScript "on_preview_shown" '' + #!/usr/bin/env bash + test -z "$joshuto_wrap_id" && exit 1; + + path="$1" # Full path of the previewed file + x="$2" # x coordinate of upper left cell of preview area + y="$3" # y coordinate of upper left cell of preview area + width="$4" # Width of the preview pane (number of fitting characters) + height="$5" # Height of the preview pane (number of fitting characters) + + # Find out mimetype and extension + mimetype=$(${file}/bin/file --mime-type -Lb "$path") + extension=$(echo "''${path##*.}" | awk '{print tolower($0)}') + + case "$mimetype" in + image/png | image/jpeg) + show_image "$path" $x $y $width $height + ;; + *) + remove_image + + esac + ''; + preview.preview_removed_hook_script = + pkgs.writeScript "on_preview_removed" '' + #!/usr/bin/env bash + test -z "$joshuto_wrap_id" && exit 1; + remove_image''; + }; + }; + }; + }; +}