diff --git a/.config/lf/preview/preview b/.config/lf/preview/preview
index a9361a9..301e7eb 100755
--- a/.config/lf/preview/preview
+++ b/.config/lf/preview/preview
@@ -11,7 +11,7 @@ image() {
     file=${1:-$f}
     # shellcheck disable=2086
     chafa -f sixel -s "${w}x${h}" --polite on --animate false "$file"
-    exit 0
+    exit
 }
 
 video() {
@@ -23,8 +23,24 @@ video() {
 }
 
 text() {
-    bat --color=always --style=plain --pager=never --terminal-width "$((w - 2))" "$@" "$f"
-    exit 1
+    for cmd in bat batcat cat; do
+        command -v $cmd >/dev/null 2>&1 && break
+    done
+    case $cmd in
+        bat*)
+            $cmd \
+                --color=always \
+                --italic-text=always \
+                --style=plain \
+                --pager=never \
+                --tabs=4 \
+                --theme=base16 \
+                --terminal-width="$((w - 2))" "$@" "$f"
+            ;;
+        cat)
+            $cmd "$f"
+            ;;
+    esac
 }
 
 run() {
@@ -43,95 +59,65 @@ run() {
 
 mimetest() {
     case "$1" in
-        */pdf)
-            [ ! -f "${CACHE}.jpg" ] && run pdftoppm -jpeg -f 1 -singlefile "$f" "$CACHE"
-            image "${CACHE}.jpg"
+        */x-bzip-compressed-tar | */x-compressed-tar | */x-xz-compressed-tar) run als -- "$f" ;;
+        */x-7z-compressed | */vnd.rar | */x-tar | */zip | */x-java-archive | */x-xz | */gzip) run 7z l "$f" | sed 1,11d ;;
+        */x-cd-image) run iso-info --no-header -l "$f" ;;
+        */x-bittorrent) run transmission-show "$f" ;;
+        */vnd.sun.xml.writer) run odt2txt "$f" ;;
+        */msword) run catdoc "$f" ;;
+        */vnd.openxmlformats-officedocument.wordprocessingml.document) run docx2txt <"$f" ;;
+        */vnd.ms-excel) run ssconvert --export-type=Gnumeric_stf:stf_csv "$f" "fd://1" | text --language=csv ;;
+        */vnd.openxmlformats-officedocument.spreadsheetml.sheet) run ssconvert --export-type=Gnumeric_stf:stf_csv "$f" "fd://1" | text --language=csv ;;
+        */pgp-encrypted) run gpg -d -- "$f" ;;
+        */pkix-cert) run openssl x509 -text -noout -in "$f" ;;
+        *opendocument*) run odt2txt "$f" ;;
+        */markdown)
+            [ ! -f "${CACHE}.txt" ] && run glow -s "$XDG_CONFIG_HOME/glow/style.json" "$f" --width "$w" >"${CACHE}.txt"
+            text "${CACHE}.txt"
             ;;
-        */x-bzip-compressed-tar | */x-compressed-tar | */x-xz-compressed-tar)
-            run als -- "$f"
-            exit 1
+        */html) run lynx -dump "$f" ;;
+        */*json)
+            [ ! -f "${CACHE}.txt" ] && run jq -C <"$f" >"${CACHE}.txt"
+            text "${CACHE}.txt"
             ;;
-        */x-7z-compressed | */vnd.rar | */x-tar | */zip | */x-java-archive | */x-xz | */gzip)
-            run 7z l "$f" | sed 1,11d
-            exit 1
-            ;;
-        */x-cd-image)
-            run iso-info --no-header -l "$f"
-            exit 1
-            ;;
-        */x-bittorrent)
-            run transmission-show "$f"
-            exit 1
-            ;;
-        */vnd.sun.xml.writer)
-            run odt2txt "$f"
-            exit 1
-            ;;
-        */msword)
-            run catdoc "$f"
-            exit 1
-            ;;
-        */vnd.openxmlformats-officedocument.wordprocessingml.document)
-            run docx2txt <"$f"
-            exit 1
-            ;;
-        */vnd.ms-excel)
-            run ssconvert --export-type=Gnumeric_stf:stf_csv "$f" "fd://1" | text --language=csv
-            exit 1
-            ;;
-        */vnd.openxmlformats-officedocument.spreadsheetml.sheet)
-            run ssconvert --export-type=Gnumeric_stf:stf_csv "$f" "fd://1" | text --language=csv
-            exit 1
+        */*yaml)
+            # [ ! -f "${CACHE}.txt" ] && run yq -C <"$f" >"${CACHE}.txt"
+            # text "${CACHE}.txt"
+            text --language=yaml
             ;;
+        */*lua) text ;;
         */epub+zip)
             [ ! -f "$CACHE" ] && run epub-thumbnailer "$f" "$CACHE" 1024
             image "$CACHE"
             ;;
-        */pgp-encrypted)
-            run gpg -d -- "$f"
-            exit 1
-            ;;
-        */pkix-cert)
-            run openssl x509 -text -noout -in "$f"
-            exit 1
-            ;;
         image/svg+xml)
             [ ! -f "${CACHE}.png" ] && run inkscape --convert-dpi-method=none -o "${CACHE}.png" --export-overwrite -D --export-png-color-mode=RGBA_16 "$f"
             image "${CACHE}.png"
             ;;
-        image/*) image ;;
+        */pdf)
+            [ ! -f "${CACHE}.jpg" ] && run pdftoppm -jpeg -f 1 -singlefile "$f" "$CACHE"
+            image "${CACHE}.jpg"
+            ;;
         video/*) video ;;
-        *opendocument*)
-            run odt2txt "$f"
-            exit 1
-            ;;
-        */markdown)
-            run glow -s "$XDG_CONFIG_HOME/glow/style.json" "$f" --width "$w"
-            exit 1
-            ;;
-        */html)
-            run lynx -dump "$f"
-            exit 1
-            ;;
+        image/*) image ;;
+        *text*) text ;;
         *) return 1 ;;
     esac
 }
 
-CACHE="${XDG_CACHE_HOME}/lf/thumbnail-$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}')"
+CACHE="${XDG_CACHE_HOME}/lf/$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}')"
+
+# Special cases
+[ "$(dirname "$(realpath "$f")" | rev | cut -d/ -f1 | rev)" = "factscache" ] &&
+    [ -f "$(dirname "$(dirname "$(realpath "$f")")")/ansible.cfg" ] &&
+    jq -C <"$f" && exit
+
+giorun="$(gio info "$f" 2>/dev/null | grep standard::content-type | cut -d' ' -f4)"
+mimetest "$giorun" && exit
 
 filerun="$(file --brief --dereference --mime-type "$f")"
-mimetest "$filerun" && exit 1
+mimetest "$filerun" && exit
 
-if command -v gio 1>/dev/null 2>&1; then
-    giorun="$(gio info "$f" 2>/dev/null | grep standard::content-type | cut -d' ' -f4)"
-    mimetest "$giorun" && exit 1
-fi
-
-case "$(file -b "$f")" in
-    *text*) text ;;
-    *)
-        printf "%b" "\$(file --mime-type)\t\t\t : $filerun\n"
-        [ -n "$giorun" ] && printf "%b" "\$(gio info)\t\t\t\t : $giorun\n"
-        mediainfo "$1" | head -n -2 | grep -v -e "Complete name" -e "General"
-        ;;
-esac
+printf "%b" "\$(file --mime-type)\t\t\t : $filerun\n"
+[ -n "$giorun" ] && printf "%b" "\$(gio info)\t\t\t\t : $giorun\n"
+mediainfo "$1" | head -n -2 | grep -v -e "Complete name" -e "General"