Add quotes script and README

This commit is contained in:
Alex Selimov 2026-07-26 20:13:58 -04:00
parent b71482c4ce
commit 941056b134
2 changed files with 114 additions and 0 deletions

View file

@ -6,6 +6,14 @@ The issue with Anytype (and Notion) is that there are too many clicks needed.
While Notion has better automation, I think nothing can beat the functionality of just scripts.
That and the fact that I want to have all the files as markdown in case I want to search/collect statistics or plots/process with a local llm inspired this project.
**This is mostly AI generated**
## Why use AI for this?
I generally try to avoid AI for personal projects in an attempt to stay mentally sharp and keep my programming skills up.
The functionality here are mainly basic automations that aren't very interesting to do by hand.
Since I want to try and use my time on more interesting problems, I don't feel too bad using AI for these.
## Functionality and status
Here is the list of functionality that I'm working towards.

106
quotes Executable file
View file

@ -0,0 +1,106 @@
#!/usr/bin/env bash
set -euo pipefail
QUOTES_FILE="${QUOTES_FILE:-$HOME/.local/share/os/quotes.txt}"
usage() {
cat <<'EOF'
Usage: quotes.sh <command> [args]
Commands:
add <quote> <author> Add a quote as: quote {{ author }}
today Print today's deterministic quote
EOF
}
trim() {
local value="$1"
value="${value#"${value%%[![:space:]]*}"}"
value="${value%"${value##*[![:space:]]}"}"
printf '%s' "$value"
}
ensure_file() {
mkdir -p "$(dirname "$QUOTES_FILE")"
if [ ! -e "$QUOTES_FILE" ]; then
touch "$QUOTES_FILE"
fi
}
add_quote() {
if [ "$#" -ne 2 ]; then
echo 'Usage: quotes.sh add <quote> <author>' >&2
exit 1
fi
ensure_file
local quote author
quote="$(trim "$1")"
author="$(trim "$2")"
if [ -z "$quote" ] || [ -z "$author" ]; then
echo 'Quote and author must be non-empty' >&2
exit 1
fi
if [[ "$quote" == *$'\n'* ]] || [[ "$author" == *$'\n'* ]]; then
echo 'Quote and author must be single-line values' >&2
exit 1
fi
if [ -s "$QUOTES_FILE" ] && [ "$(tail -c 1 "$QUOTES_FILE" 2>/dev/null || true)" != $'\n' ]; then
printf '\n' >> "$QUOTES_FILE"
fi
printf '%s {{ %s }}\n' "$quote" "$author" >> "$QUOTES_FILE"
}
today_quote() {
ensure_file
local day hash
day="$(date +%F)"
hash="$(printf '%s' "$day" | cksum | awk '{print $1}')"
awk -v hash="$hash" '
NF { lines[count++] = $0 }
END {
if (count == 0) {
exit 1
}
line = lines[hash % count]
if (match(line, / \{\{ .* \}\}$/)) {
quote = substr(line, 1, RSTART - 1)
author = substr(line, RSTART)
sub(/^ \{\{ /, "", author)
sub(/ \}\}$/, "", author)
printf "%s\n-- %s\n", quote, author
} else {
print line
}
}
' "$QUOTES_FILE" || {
echo "No quotes found in $QUOTES_FILE" >&2
exit 1
}
}
case "${1:-}" in
add)
shift
add_quote "$@"
;;
today|daily)
today_quote
;;
-h|--help|help)
usage
;;
*)
usage >&2
exit 1
;;
esac