feat: add CLI with TUI, self-update, install script, and terminal section on landing page

- Full-screen Bubble Tea TUI with cream background fill using PadLine/FillBlankLines
- Self-update command (--update) pulling from GitHub releases
- install.sh for curl one-liner installation
- Terminal Lovers section on web landing page with install command and CLI features
- All 7 format categories, glob/directory batch support, auto-download ffmpeg
This commit is contained in:
noah
2026-03-09 22:53:10 +01:00
parent b9aac61ab8
commit 04a1f33cb1
23 changed files with 4064 additions and 0 deletions
Executable
+109
View File
@@ -0,0 +1,109 @@
#!/bin/sh
# Transmute CLI installer
# Usage: curl -fsSL https://raw.githubusercontent.com/noauf/Transmute/main/install.sh | sh
set -e
REPO="noauf/Transmute"
BINARY="transmute"
INSTALL_DIR="/usr/local/bin"
# Detect OS
OS="$(uname -s)"
case "$OS" in
Darwin) OS="darwin" ;;
Linux) OS="linux" ;;
MINGW*|MSYS*|CYGWIN*) OS="windows" ;;
*)
echo "Error: unsupported operating system: $OS"
exit 1
;;
esac
# Detect architecture
ARCH="$(uname -m)"
case "$ARCH" in
x86_64|amd64) ARCH="x86_64" ;;
arm64|aarch64) ARCH="arm64" ;;
*)
echo "Error: unsupported architecture: $ARCH"
exit 1
;;
esac
# Determine file extension
if [ "$OS" = "windows" ]; then
EXT="zip"
else
EXT="tar.gz"
fi
ASSET="${BINARY}-${OS}-${ARCH}.${EXT}"
echo "Transmute CLI installer"
echo "======================"
echo ""
echo " OS: $OS"
echo " Arch: $ARCH"
echo ""
# Get latest release tag
echo "Fetching latest release..."
TAG=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep '"tag_name"' | head -1 | sed 's/.*"tag_name": *"\([^"]*\)".*/\1/')
if [ -z "$TAG" ]; then
echo "Error: could not determine latest release"
exit 1
fi
echo " Latest version: $TAG"
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${TAG}/${ASSET}"
echo " Downloading $ASSET..."
# Create temp directory
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT
curl -fsSL "$DOWNLOAD_URL" -o "${TMP_DIR}/${ASSET}"
# Extract
echo " Extracting..."
if [ "$EXT" = "tar.gz" ]; then
tar -xzf "${TMP_DIR}/${ASSET}" -C "$TMP_DIR"
else
unzip -q "${TMP_DIR}/${ASSET}" -d "$TMP_DIR"
fi
# Find the binary
BIN_PATH=""
if [ -f "${TMP_DIR}/${BINARY}" ]; then
BIN_PATH="${TMP_DIR}/${BINARY}"
elif [ -f "${TMP_DIR}/${BINARY}-${OS}-${ARCH}/${BINARY}" ]; then
BIN_PATH="${TMP_DIR}/${BINARY}-${OS}-${ARCH}/${BINARY}"
fi
if [ -z "$BIN_PATH" ]; then
echo "Error: could not find ${BINARY} binary in archive"
exit 1
fi
chmod +x "$BIN_PATH"
# Install
echo " Installing to ${INSTALL_DIR}/${BINARY}..."
if [ -w "$INSTALL_DIR" ]; then
mv "$BIN_PATH" "${INSTALL_DIR}/${BINARY}"
else
echo " (requires sudo)"
sudo mv "$BIN_PATH" "${INSTALL_DIR}/${BINARY}"
fi
echo ""
echo " Installed transmute $TAG to ${INSTALL_DIR}/${BINARY}"
echo ""
echo " Get started:"
echo " transmute *.png Convert all PNGs"
echo " transmute ./files/ Convert all files in a directory"
echo " transmute --help Show all options"
echo ""