101 lines
2.0 KiB
Bash
Raw Normal View History

2026-03-09 00:07:31 -04:00
#!/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