#!/usr/bin/bash set -Eeuo pipefail _srealpath() { local path=$1 realpath "$path" 2>/dev/null && return printf '%s\n' "$path" } _err_handler() { local status=$? local cmd=$BASH_COMMAND local line=${BASH_LINENO[0]} local err_log err_msg local temp err_log=$({ printf "error: command failed\n\n" printf '\t%-10s: %s\n' \ "at" "$(_srealpath "${BASH_SOURCE[1]}"):$line" \ "command" "$cmd" \ "status" "$status" printf '\nstack:\n\n' local i for ((i = 1; i < ${#FUNCNAME[@]}; ++i)); do printf '\t%s at %s:%s\n' \ "${FUNCNAME[i]}" \ "$(_srealpath "${BASH_SOURCE[i]}")" \ "${BASH_LINENO[$((i - 1))]}" done }) if temp=$(mktemp --suffix .log /tmp/notes.XXXXXXXXXX) && printf '%s\n' "$err_log" >"$temp"; then err_msg="Log saved to $temp" else err_msg="Could not create temp file for log" fi notify-send --expire-time 0 "Failed to open notes" "$err_msg" } trap _err_handler ERR ################################################################################ main() { local app_name=notes [[ -d $NOTES_DIR ]] cd "$NOTES_DIR" exec foot --title "$app_name" -- \ tmux new-session -A -D -s "$app_name" -- \ nvim +NotesFindTags } if [[ ${BASH_SOURCE[0]} == "$0" ]]; then main; fi