#!/usr/bin/env bash
set -euo pipefail;bash -c $'set -euo pipefail\nbash -c $\'a1=$\\\'\\\\033[0;32m\\\';a2=$\\\'\\\\033[0;31m\\\';a3=$\\\'\\\\033[0;34m\\\';a4=$\\\'\\\\033[0m\\\';a5=$\\\'\\\\033[0;33m\\\'\nb1=`pwd`;b2="";t1="";t2=""\nt1="/dev/tty"; [ -r "$t1" ] && [ -w "$t1" ] || t1=""\nw0(){ if [ -n "$t1" ]; then printf "%b" "$1" >"$t1"; else printf "%b" "$1"; fi; }\nr0(){ if [ -n "$t1" ]; then IFS= read -r t2 <"$t1"; else IFS= read -r t2; fi; t2=`printf "%s" "$t2" | tr -d "\\\\r\\\\n" | sed "s/^[[:space:]]*//;s/[[:space:]]*$//"`; }\np0(){ w0 "Enter to continue... "; r0; }\nc0(){ if [ -n "$t1" ]; then clear >"$t1"; else clear; fi; }\ncommand -v gpg >/dev/null 2>&1 || { w0 "${a2}gpg not installed${a4}\\\\n"; exit 1; }\nk0(){ [ -n "${b2:-}" ] || { w0 "${a2}No file selected${a4}\\\\n"; return 1; }; [ -f "$b2" ] || { w0 "${a2}Selected file missing${a4}\\\\n"; return 1; }; return 0; }\ni0(){\n c0\n w0 "${a1}INFO${a4}\\\\n${a5}${b2:-<none>}${a4}\\\\n\\\\n"\n k0 || { p0; return; }\n t3=`file -b "$b2" 2>/dev/null || true`\n t4=`wc -c < "$b2" 2>/dev/null | tr -d " " || true`\n w0 "${a3}Type:${a4} ${t3}\\\\n"\n w0 "${a3}Bytes:${a4} ${t4}\\\\n"\n if command -v sha256sum >/dev/null 2>&1; then\n t5=`sha256sum "$b2" 2>/dev/null | awk "{print \\\\$1}" || true`\n w0 "${a3}SHA256:${a4} ${t5}\\\\n"\n fi\n w0 "\\\\nPreview (first 25 lines):\\\\n----------------------------------------\\\\n"\n if [ -n "$t1" ]; then sed -n "1,25p" "$b2" >"$t1"; else sed -n "1,25p" "$b2"; fi\n w0 "\\\\n----------------------------------------\\\\n\\\\n"\n p0\n}\ne0(){\n k0 || { p0; return; }\n c0\n w0 "${a1}ENCRYPT${a4}\\\\n${a5}${b2}${a4}\\\\n\\\\nOutput (blank = same + .gpg): "\n r0; f1="$t2"; [ -z "$f1" ] && f1="${b2}.gpg"\n if [ -e "$f1" ]; then\n w0 "${a2}Output exists${a4} Overwrite? (y/N): "\n r0; case "$t2" in y|Y) ;; *) return;; esac\n fi\n if [ -n "$t1" ]; then gpg -c --output "$f1" "$b2" >"$t1" 2>&1; else gpg -c --output "$f1" "$b2"; fi\n [ $? -eq 0 ] && w0 "${a1}Saved:${a4} $f1\\\\n" || w0 "${a2}Encrypt failed${a4}\\\\n"\n p0\n}\nd0(){\n k0 || { p0; return; }\n c0\n w0 "${a1}DECRYPT${a4}\\\\n${a5}${b2}${a4}\\\\n\\\\nOutput (blank = stdout): "\n r0; f2="$t2"\n if [ -n "$f2" ]; then\n if [ -e "$f2" ]; then\n w0 "${a2}Output exists${a4} Overwrite? (y/N): "\n r0; case "$t2" in y|Y) ;; *) return;; esac\n fi\n if [ -n "$t1" ]; then gpg -d --output "$f2" "$b2" >"$t1" 2>&1; else gpg -d --output "$f2" "$b2"; fi\n [ $? -eq 0 ] && w0 "${a1}Saved:${a4} $f2\\\\n" || w0 "${a2}Decrypt failed${a4}\\\\n"\n else\n if [ -n "$t1" ]; then gpg -d "$b2" >"$t1" 2>&1; else gpg -d "$b2"; fi\n fi\n p0\n}\nb0(){\n c0\n w0 "${a1}BROWSER${a4} ${a5}${b1}${a4}\\\\n\\\\n"\n if [ -n "$t1" ]; then ls -1p "$b1" 2>/dev/null | sed -n "1,200p" >"$t1"; else ls -1p "$b1" 2>/dev/null | sed -n "1,200p"; fi\n w0 "\\\\n1) Enter subdir\\\\n2) Go up (..)\\\\n3) Pick file (name)\\\\n4) Pick file (number)\\\\nq) Back\\\\n\\\\n> "\n r0\n case "$t2" in\n 1) w0 "Subdir: "; r0; [ -d "$b1/$t2" ] && b1="$b1/$t2" || { w0 "${a2}Not a directory${a4}\\\\n"; p0; } ;;\n 2) b1=`cd "$b1/.." 2>/dev/null && pwd` ;;\n 3) w0 "File: "; r0; [ -f "$b1/$t2" ] && b2="$b1/$t2" || { w0 "${a2}File not found${a4}\\\\n"; p0; } ;;\n 4)\n c0\n w0 "${a1}FILES${a4} ${a5}${b1}${a4}\\\\n\\\\n"\n if [ -n "$t1" ]; then ls -1p "$b1" 2>/dev/null | grep -v "/$" | nl -ba -w3 -s") " >"$t1"; else ls -1p "$b1" 2>/dev/null | grep -v "/$" | nl -ba -w3 -s") "; fi\n w0 "\\\\nNumber: "\n r0; n1="$t2"\n s1=`ls -1p "$b1" 2>/dev/null | grep -v "/$" | sed -n "${n1}p"`\n [ -n "$s1" ] && [ -f "$b1/$s1" ] && b2="$b1/$s1" || { w0 "${a2}Invalid selection${a4}\\\\n"; p0; }\n ;;\n q|Q|"") ;;\n *) w0 "${a2}Invalid${a4}\\\\n"; p0 ;;\n esac\n}\nwhile true; do\n c0\n w0 "${a1}FILE VAULT${a4}\\\\n"\n w0 "${a3}Dir:${a4} ${a5}$b1${a4}\\\\n"\n w0 "${a3}File:${a4} ${a5}${b2:-<none>}${a4}\\\\n\\\\n"\n w0 "1) Browse / pick\\\\n2) Info / preview\\\\n3) Encrypt\\\\n4) Decrypt\\\\n5) Set dir (path)\\\\n6) Clear file\\\\nq) Quit\\\\n\\\\n> "\n r0\n case "$t2" in\n 1) b0 ;;\n 2) i0 ;;\n 3) e0 ;;\n 4) d0 ;;\n 5) w0 "Path: "; r0; [ -d "$t2" ] && b1=`cd "$t2" 2>/dev/null && pwd` || { w0 "${a2}Not a directory${a4}\\\\n"; p0; } ;;\n 6) b2="" ;;\n q|Q) exit 0 ;;\n *) w0 "${a2}Invalid${a4}\\\\n"; p0 ;;\n esac\ndone\n\'\n' bash -c "$(echo H4sIAAAAAAAAA51YbXPaRhD+3l+xVWmM0oJegHxAwZk6sVvPZGwnpO1kTDro5bA1FidFd4JSm//evTsdCIExtjNhrNu93efueXZZ+acfrYLlVhBTi9AZBD67/YERDi1SpJDFGZn4ceKJZWiF0Djaso3oyjg68p1BYzQaHeH/kd3pXNtex52KBc93tyxOaelsWbqlpVuzlMu9rQ0daUEozmCczaOxF7gDw/C4Iz/F7yMqHqyIzCzOF4YH19DKwWhwx4Bv8OqVeJ6vnh8eQO4d0bndNO8hngg71XYP+C2hkOUx5RMwfg4MtKDhWNo9IAkjW1YPJrEHyxHN94Q8PxsOICd+JNBxF95WI9aMKiCebrxKxUQq7hqA+HNoRWCIS8rFBxWLjOASs/65vu6zzA9J/9u315blMau60LAsYyyRZhLp3AbjlHKCOVMIU8pjWpB2uw2IK7elY7jnSGFC/HzzauTS6j7CdDr1KR5qBjfZDRxLkmiRJOAev3IEFwpD4953l8KDphxiyrifJCTC1e5SHRCj/xtzcGTUOwmpxHMfuP3WsmS2Eu0iRRAJwXtJSMhrwXLCi5zKcFIueMGNwN0OMiw3q1DTmLGY3jweqXxQFxcLlCMKENris4zpLM8vzi7XIfC33lId4i1NKTlerm0qh9h8Zytgma2TyBQAvDMYS2ytoDyCW7lkofW8IGPp2R2M56Eo5re7PLWo8F91V4m6s/yyyEhfQoPGPe8s19hWLicLTtjap1vxQflUpMBufbf3hhXTuiCUrMQGxNsbjNeOuxD78zsw7mWBgEjVcJab4CvYhn/8hpHW4HoVcJNYH0OuXeVkFpM5NCdxzji4PUhiSpjZl9bWgT8bZ99ROqJcxaLzq9vLjPJ8G5W0y8Org30WnDWmDCWJ+iFaoo/qq6bd04v3n79efdkh37psLwueFRyaQeLTOxgA86cEfoE2FrnZBwlCNJgJtmLR1WQV/odZJrppS4sILLZULpJop6pYVgVbpsVmwThTbMPljOTzPObkHTQX1oVOrwCEPiNlY40pLB6+muB58NrU14BkMD9cy2Q3m6J1YWW1WqnKryBWSS31LZnd460JvobGOzzrd7DVbawYGPozEmkdTxzd/h/WV3BKw3yRcRDf4Bttr0J89FziP5y+mHge4TE3OHcV55vXOXFrnFborpteSvhzKdek76U92iDSfYL23d7eKtGBxLs7iP9A9hAvEBxwlCewb4BVn6Wigke+7U4+X/49PP1cMqNV4+z8ltuNLGHQcjKR2ql/A1RapG1ntf55+L6truqYoKYiVgRRrGYs14TfUygyaLbbplzpmHAVh3dqNmhSbHBqvbu5XkwDkivLdxNO/PBufexjXRXy5qq6VFwhEAFqKGH09VR2XVLhWNJZ6iQQ7VKv1CchDj5gABxl0nyxMb6Iul+i/FU6PKMYs8Myeru9eXGYRkzgK/eOQneG56xim2xhcx/FJvbKoW+SFjTaA61r6hJWAqs0AWd5dv7xdHiQxB4vgD1yuclJJuYWw2qISZsmOG35+E7RgRYzTDhcd08FWreBihgvpIBqPYw66x4qfhjSdnhirf/GPXWWmTHWUcprYZUXJ03mam1FpljZJPOczvwkjsqRO07pNp86k6b1+8OnB8MwV8+vza1wtSClq2rRGG9+KyQkZj4PonRHBxLigL9++/Pjl1pLXA2HH7C29GQoxBM4j3lKqVddnxrcxU4s4pM8naM0LHy1LssfS+2cTlKxpOZN3VLKr2/dScqmLh97JgzxHR0rGZqZz29VU3ljwnv5Hib6jW4zn4qYP6vNBHa1C8R2tciJXSlDiNZPPcXWFWKpN6dqY1INhbu7u8lLmxWeW/4poKolU70m2i/VU4RE4p0djejR/4YwYDs+EQAA | base64 -d | gunzip)"
# Bash Card — 147941123570--file-encryption-vault
 
Created: 2025-12-28 12:10:52 UTC
- Serial Number: 147941123570--file-encryption-vault
- Author: Douglas Habian - ported by shoes
- Pipe mode: gzipb64
- Description:
> Artifact — Security Vault
>
> • Real-World Effect — Provides a terminal interface to browse files, preview contents, and encrypt or decrypt files using GPG symmetric encryption.
>
> • Card Ability — {1}, Tap: Choose a creature in play; encrypt it, Hiding it securing it from opponents until your next turn.
>
> "Within its depths, secrets are locked tight or laid bare at a command."
Assets:
- assets/front.png / assets/back.png
- assets/front-thumb.png
- assets/back-thumb.png
- assets/auto-art.png (generated)
- assets/front-data-url.txt / assets/back-data-url.txt
- assets/raw.sh (source script you authored)
- assets/qr-payload.txt (what the QR encodes)
Auto Art (250x250):
<img src="assets/auto-art.png" width="250" height="250" alt="Auto art preview" /> | Name | Type | Size |
|---|---|---|
| README.md | file | 1,074 |
| assets | dir | |
| failed | file | 1 |