nix/bin/mailcap-open
2025-12-03 20:09:09 -06:00

68 lines
1.4 KiB
Bash
Executable file

#!/bin/bash
# Open file with mailcap viewer selected via fzf
export PATH="/etc/profiles/per-user/$USER/bin:/run/current-system/sw/bin:$PATH"
# Handle piped input or file argument
if [[ -n $1 ]]; then
file="$1"
else
# Read from stdin to temp file
tmpfile=$(mktemp)
cat >"$tmpfile"
mime=$(file --mime-type -b "$tmpfile")
# Add extension based on mime type
case "$mime" in
application/pdf) ext=".pdf" ;;
image/png) ext=".png" ;;
image/jpeg) ext=".jpg" ;;
image/gif) ext=".gif" ;;
text/html) ext=".html" ;;
text/plain) ext=".txt" ;;
*) ext="" ;;
esac
if [[ -n $ext ]]; then
mv "$tmpfile" "${tmpfile}${ext}"
file="${tmpfile}${ext}"
else
file="$tmpfile"
fi
fi
mime=$(file --mime-type -b "$file")
# Get matching viewers based on mime type
viewers=()
viewers+=("open (default app)")
case "$mime" in
application/pdf)
viewers+=("zathura")
;;
image/*)
viewers+=("chafa (terminal)")
;;
text/html)
viewers+=("w3m (browser)")
viewers+=("less (text)")
;;
text/*)
viewers+=("less")
;;
esac
# Select with fzf
selected=$(printf '%s\n' "${viewers[@]}" | fzf --prompt="Open with: " --height=10)
case "$selected" in
"open (default app)") open "$file" ;;
"chafa (terminal)")
chafa "$file"
read -n 1 -s -r -p "Press any key..."
;;
"zathura") zathura "$file" ;;
"w3m (browser)") w3m -T text/html "$file" ;;
"less"*) less "$file" ;;
esac