#!/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+=("bat") viewers+=("nvim (readonly)") ;; 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" ;; "bat") bat --paging=always --style=plain "$file" ;; "nvim (readonly)") nvim -R "$file" ;; esac