#!/usr/bin/env bash set -uo pipefail export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 LAUNCHER=('rofi' '-kb-custom-1' 'Alt+d' '-kb-custom-2' 'Alt+n' '-kb-custom-3' 'Alt+e' '-theme-str' 'window {width: 20%;}' '-dmenu' '-c' '-l' '10' '-p') NOTESDIR="${XDG_DOCUMENTS_DIR:-$HOME/.notes}" mkdir -p "$NOTESDIR" newnote() { local NAME NAME=$(printf "%s" "$(find "$NOTESDIR" -maxdepth 1 -type f -printf '%T@ %f\n' | sort -rn | cut -d' ' -f2-)" | \ "${LAUNCHER[@]}" "new:" | xargs) if [[ -z "$NAME" ]]; then return 1 fi touch "${NOTESDIR}/${NAME}" main } opennote() { local NOTE="$1" $TERMINAL --class notes "$EDITOR" "${NOTESDIR}/${NOTE}" main } deletenote() { local NOTE="${1:-}" if [[ -z "$NOTE" ]]; then NOTE=$(find "$NOTESDIR" -maxdepth 1 -type f -printf '%T@ %f\n' | sort -rn | cut -d' ' -f2- | \ "${LAUNCHER[@]}" "delete:") fi [[ -z "$NOTE" ]] && return 1 local CONFIRM CONFIRM=$(printf "%s\n%s\n" "no" "yes" | \ "${LAUNCHER[@]}" "delete ${NOTE}:") if [[ "$CONFIRM" == "yes" ]]; then rm "${NOTESDIR}/${NOTE}" echo "Deleted ${NOTE}" fi main } editnote() { local NOTE="${1:-}" NAME=$(echo "" | \ "${LAUNCHER[@]}" 'edit:' -filter "$NOTE" -matching prefix) if [[ -z "$NAME" ]]; then main fi if [[ "${NOTE}" != "${NAME}" ]]; then mv "${NOTESDIR}/${NOTE}" "${NOTESDIR}/${NAME}" fi main } main() { local CHOICE CHOICE=$(printf "%s" "$(find "$NOTESDIR" -maxdepth 1 -type f -printf '%T@ %f\n' | sort -rn | cut -d' ' -f2-)" | \ "${LAUNCHER[@]}" "notes:") local EXITCODE=$? case $EXITCODE in 0) # Enter pressed case "$CHOICE" in *) opennote "$CHOICE" ;; esac ;; 10) # Delete pressed case "$CHOICE" in *) deletenote "$CHOICE" ;; esac ;; 11) # New pressed case "$CHOICE" in *) newnote ;; esac ;; 12) case "$CHOICE" in *) editnote "$CHOICE";; esac ;; 1) # Escape pressed exit 0 ;; esac } main