#!/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