commit 84bff9066492e7f8cdf84e6cac04fc067aa76a0f Author: Γ„min Baumeler Date: Mon Jul 21 14:28:02 2025 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cfe479c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +muf diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..c2257b6 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +BOLD="\033[1m" +GREEN="\033[0;32m" +OFF="\033[m" +NAME="muf" +SRC="./src/main.sh" + +tmpdir=$(mktemp -d) +echo "πŸ” ${GREEN}Internalize sourced files${OFF}" +sed -E 's|\. "([^$].+)"$|cat src/\1|e' "$SRC" >"$tmpdir/1.sh" +echo "πŸ₯š ${GREEN}Internalize awk scripts${OFF}" +sed -E 's|@@include (.+)$|cat src/\1|e' "$tmpdir/1.sh" >"$tmpdir/2.sh" +echo "πŸ” ${GREEN}Internalize awk libraries${OFF}" +sed -E 's|@include "(.+)"$|cat src/\1|e' "$tmpdir/2.sh" >"$NAME" +echo "πŸ₯š ${GREEN}Make executable and cleanup${OFF}" +chmod +x "$NAME" +rm -rf "$tmpdir" +echo "🍳 ${GREEN}Done:${OFF} Sucessfully built ${BOLD}${GREEN}$NAME${OFF}" diff --git a/src/awk/artists.awk b/src/awk/artists.awk new file mode 100644 index 0000000..3097d37 --- /dev/null +++ b/src/awk/artists.awk @@ -0,0 +1,11 @@ +BEGIN { OFS="\t" } +$2 == "Group" { name = format_group } +$2 != "Group" { name = format_person } +{ + gsub("&", "\\\\&") + if ($4) + name = name " " format_disambiguation + sub("<>", $4, name) + sub("<>", $3, name) + print $1, name +} diff --git a/src/main.sh b/src/main.sh new file mode 100755 index 0000000..9d925e2 --- /dev/null +++ b/src/main.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +set -eu + +# Load helper methods +. "sh/info.sh" + +# Load helper methods +. "sh/helper.sh" + +# Load MusicBrainz methods +. "sh/mb.sh" + +if [ "${1:-}" = "--internal-reload" ]; then + sleep 2 + while [ -f "$LOCKFILE" ]; do + sleep 1 + done + cat "$RESULTS" + exit 0 +fi + +if [ "${1:-}" = "--internal-search" ]; then + printf "" >"$RESULTS" + if [ -f "$PIDFILE" ]; then + pid=$(cat "$PIDFILE") + rm -f "$PIDFILE" + kill -9 "$pid" >/dev/null 2>&1 || true + fi + [ ! "${2}" ] && exit 0 + # Save current pid + echo "$$" >"$PIDFILE" + sleep 1 + touch "$LOCKFILE" + mb_browse_artists "$2" | + $JQ -r '.artists[] | [.id, .type, .name, .disambiguation, .["life-span"].begin, .["life-span"].end] | join("\t")' | + awk \ + -F "\t" \ + -v format_person="$FORMAT_PERSON" \ + -v format_group="$FORMAT_GROUP" \ + -v format_disambiguation="$FORMAT_DISAMBIGUATION" \ + "$AWK_ARTISTS" | + tee "$RESULTS" || + true + rm -f "$LOCKFILE" "$PIDFILE" + exit 0 +fi + +# Load theme +. "sh/theme.sh" + +# Load AWK scripts +. "sh/awk.sh" + +# Load tools +. "sh/tools.sh" + +if [ "${1:-}" = "--help" ]; then + $CAT </dev/null; then + FZF="fzf --black" +else + err "Did not find the command-line fuzzy finder fzf." + exit 1 +fi +export FZF + +if command -v "bat" >/dev/null; then + CAT="bat" +elif command -v "batcat" >/dev/null; then + CAT="batcat" +fi +CAT=${CAT:+$CAT --color=always --style=plain --language=md} +CAT=${CAT:-cat} +export CAT + +if command -v "curl" >/dev/null; then + CURL="curl --silent" +else + err "Did not find curl." + exit 1 +fi +export CURL + +if command -v "jq" >/dev/null; then + JQ="jq" +else + err "Did not find jq." + exit 1 +fi +export JQ