From 9e208ecbe98977ccedcb8a3b5c8c4ea7eb053ff7 Mon Sep 17 00:00:00 2001 From: lew Date: Mon, 3 Nov 2025 22:51:44 +0000 Subject: [PATCH] Add .local/bin/make-pwa --- private_dot_local/bin/executable_make-pwa | 97 +++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 private_dot_local/bin/executable_make-pwa diff --git a/private_dot_local/bin/executable_make-pwa b/private_dot_local/bin/executable_make-pwa new file mode 100644 index 0000000..e5b82aa --- /dev/null +++ b/private_dot_local/bin/executable_make-pwa @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +# +# make-pwa +# makes a chromium PWA desktop entry for the given url + +set -e + +usage() { + echo "Usage:" + echo " $0 create " + echo " $0 delete " + exit 1 +} + +if [ "$#" -lt 2 ]; then + usage +fi + +ACTION="$1" +NAME="$2" +DESKTOP_DIR="$HOME/.local/share/applications" +DESKTOP_FILE="$DESKTOP_DIR/pwa-${NAME}.desktop" +ICON_DIR="$HOME/.local/share/icons" +ICON_FILE="$ICON_DIR/pwa-${NAME}.ico" +PNG_ICON_FILE="$ICON_DIR/pwa-${NAME}.png" + +fetch_favicon() { + URL="$1" + mkdir -p "$ICON_DIR" + FAVICON_URL="${URL}/favicon.ico" + if curl -fsSL -A "Mozilla/5.0" "$FAVICON_URL" -o "$ICON_FILE"; then + if command -v convert >/dev/null 2>&1; then + if magick "$ICON_FILE[-1]" "$PNG_ICON_FILE"; then + echo "$PNG_ICON_FILE" + else + echo "" + fi + else + echo "$ICON_FILE" + fi + else + echo "" + fi +} + +case "$ACTION" in + create) + if [ "$#" -lt 3 ]; then + usage + fi + URL="$3" + if [ "$#" -ge 4 ]; then + ICON_PATH="$4" + else + ICON_PATH=$(fetch_favicon "$URL") + if [ -z "$ICON_PATH" ]; then + ICON_BASENAME="web-browser" + else + # Remove extension for .desktop Icon field if it's a PNG in ICON_DIR + if [[ "$ICON_PATH" == "$ICON_DIR"/*.png ]]; then + ICON_BASENAME="$(basename "$ICON_PATH" .png)" + else + ICON_BASENAME="$ICON_PATH" + fi + fi + fi + mkdir -p "$DESKTOP_DIR" + cat > "$DESKTOP_FILE" <