diff --git a/nixosVista/homeManager/cliphist/main.nix b/nixosVista/homeManager/cliphist/main.nix index c583c70..5973178 100644 --- a/nixosVista/homeManager/cliphist/main.nix +++ b/nixosVista/homeManager/cliphist/main.nix @@ -7,20 +7,66 @@ }: { config = lib.mkIf nixosVista.enable { home.packages = with pkgs; [ + wezterm wl-clipboard cliphist fzf + file + bat + timg wofi + imagemagick # <-- required for identify ]; home.file.".local/bin/TermClipboardManager" = { executable = true; text = '' #!/usr/bin/env bash - cliphist list | \ - fzf --preview 'cliphist decode {1} | chafa -' \ - --preview-window=right:60%:wrap | \ - cliphist decode | wl-copy + set -euo pipefail + + preview() { + TMP=$(mktemp) + cliphist decode "$1" > "$TMP" 2>/dev/null || { + echo "Failed to decode" + rm -f "$TMP" + return + } + + MIME=$(file --mime-type -b "$TMP") + + if [[ "$MIME" == image/* ]]; then + DIM=$(identify -format "%wx%h" "$TMP" 2>/dev/null || echo "unknown") + echo "Image • $MIME • $DIM" + echo "----------------------------------------" + timg --quiet --center --fit "$TMP" + else + echo "Text • $MIME" + echo "----------------------------------------" + bat --style=plain --color=always "$TMP" 2>/dev/null || cat "$TMP" + fi + + rm -f "$TMP" + } + + export -f preview + + while true; do + SELECTION=$( + cliphist list | \ + fzf \ + --height=100% \ + --border \ + --preview 'bash -c "preview {}"' \ + --preview-window=right:60% \ + --bind 'del:execute-silent(cliphist delete {} )+reload(cliphist list)' \ + --bind 'ctrl-d:execute-silent(cliphist wipe)+reload(cliphist list)' + ) + + [[ -z "$SELECTION" ]] && exit 0 + + cliphist decode <<< "$SELECTION" | wl-copy + exit 0 + done ''; }; @@ -48,15 +94,25 @@ #exec-once = wl-paste --type image --watch cliphist store bind = $mainMod, V, exec, cliphist list | wofi --dmenu --prompt "Clipboard" | cliphist decode | wl-copy - bind = $mainMod SHIFT, V, exec, alacritty --class TermClipboardManager -e TermClipboardManager - + #bind = $mainMod SHIFT, V, exec, alacritty --class TermClipboardManager -e ~/.local/bin/TermClipboardManager + bind = $mainMod SHIFT, V, exec, wezterm start --class TermClipboardManager -- ~/.local/bin/TermClipboardManager # TermClipboardManager + # windowrule = float 1, match:class ^(TermClipboardManager)$ + # windowrule = size 1000 600, match:class ^(TermClipboardManager)$ + # windowrule = center 1, match:class ^(TermClipboardManager)$ + # windowrule = animation popin, match:class ^(TermClipboardManager)$ + # windowrule = rounding 20, match:class ^(TermClipboardManager)$ + # TermClipboardManager windowrule = float 1, match:class ^(TermClipboardManager)$ windowrule = size 1000 600, match:class ^(TermClipboardManager)$ windowrule = center 1, match:class ^(TermClipboardManager)$ windowrule = animation popin, match:class ^(TermClipboardManager)$ windowrule = rounding 20, match:class ^(TermClipboardManager)$ + windowrule = noborder 1, match:class ^(TermClipboardManager)$ + windowrule = blur, match:class ^(TermClipboardManager)$ + windowrule = opaque 0.95, match:class ^(TermClipboardManager)$ + ''; }; }