From 9de60f23cc224ae760976a0b43dd892f12436d89 Mon Sep 17 00:00:00 2001 From: lew Date: Thu, 2 Apr 2026 00:18:58 +0100 Subject: [PATCH] feat: moved to an actual directory, moving from /nag[f] to /nag/alarms --- nag | 27 +++++++++++++-------------- test/nag.bats | 12 ++++++------ test/test_helper.bash | 7 +++---- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/nag b/nag index e9a357c..b2812b8 100755 --- a/nag +++ b/nag @@ -35,8 +35,9 @@ IFS=$'\n\t' _ME="$(basename "${0}")" _VERSION="2026.14" -NAG_PATH="${NAG_PATH:-${HOME}/.local/share/nag}" -_LOCKFILE="${NAG_PATH}.lock" +NAG_DIR="${NAG_DIR:-${HOME}/.local/share/nag}" +_ALARMS_FILE="${NAG_DIR}/alarms" +_LOCKFILE="${NAG_DIR}/alarms.lock" # The command nag runs to execute its notifications. NAG_CMD="${NAG_CMD:-notify-send}" @@ -371,11 +372,9 @@ _ALARMS=() # _ensure_nag_dir # # Description: -# Create the parent directory for NAG_PATH if it doesn't already exist. +# Create the nag directory if it doesn't already exist. _ensure_nag_dir() { - local _dir - _dir="$(dirname "${NAG_PATH}")" - [[ -d "${_dir}" ]] || mkdir -p "${_dir}" + [[ -d "${NAG_DIR}" ]] || mkdir -p "${NAG_DIR}" } # Usage: @@ -409,18 +408,18 @@ _release_lock() { # _read_alarms # # Description: -# Read alarms from NAG_PATH into the global _ALARMS array. Each element +# Read alarms from _ALARMS_FILE into the global _ALARMS array. Each element # is one raw TSV line. If the file is missing or empty, _ALARMS is set to # an empty array. _read_alarms() { _ALARMS=() - if [[ -f "${NAG_PATH}" ]] && [[ -s "${NAG_PATH}" ]] + if [[ -f "${_ALARMS_FILE}" ]] && [[ -s "${_ALARMS_FILE}" ]] then local _line while IFS= read -r _line || [[ -n "${_line}" ]] do [[ -n "${_line}" ]] && _ALARMS+=("${_line}") - done < "${NAG_PATH}" || true + done < "${_ALARMS_FILE}" || true fi } @@ -428,20 +427,20 @@ _read_alarms() { # _write_alarms # # Description: -# Write the _ALARMS array atomically to NAG_PATH. Writes to a temporary +# Write the _ALARMS array atomically to _ALARMS_FILE. Writes to a temporary # file first, then moves it over the original. If _ALARMS is empty, an # empty file is written. _write_alarms() { _ensure_nag_dir local _tmp - _tmp="$(mktemp "${NAG_PATH}.XXXXXX")" + _tmp="$(mktemp "${_ALARMS_FILE}.XXXXXX")" if (( ${#_ALARMS[@]} > 0 )) then printf "%s\n" "${_ALARMS[@]}" > "${_tmp}" else : > "${_tmp}" fi - mv -f "${_tmp}" "${NAG_PATH}" + mv -f "${_tmp}" "${_ALARMS_FILE}" } # Usage: @@ -978,7 +977,7 @@ Description: List all alarms. This is the default when no subcommand is given. HEREDOC list() { - if [[ ! -f "${NAG_PATH}" ]] || [[ ! -s "${NAG_PATH}" ]] + if [[ ! -f "${_ALARMS_FILE}" ]] || [[ ! -s "${_ALARMS_FILE}" ]] then printf "Nothing to nag about.\\n" return 0 @@ -1063,7 +1062,7 @@ stop() { if [[ "${#_new_alarms[@]}" -eq 0 ]] then _ALARMS=() - : > "${NAG_PATH}" + : > "${_ALARMS_FILE}" else _ALARMS=("${_new_alarms[@]}") _write_alarms diff --git a/test/nag.bats b/test/nag.bats index 9a897c2..f7e695e 100644 --- a/test/nag.bats +++ b/test/nag.bats @@ -51,11 +51,11 @@ load test_helper run_nag at "tomorrow 3pm" "take a break" [ "${status}" -eq 0 ] [[ "${output}" =~ "[1] Tomorrow, 3pm — take a break" ]] - [ -f "${NAG_PATH}" ] - [ "$(wc -l < "${NAG_PATH}")" -eq 1 ] + [ -f "${NAG_DIR}/alarms" ] + [ "$(wc -l < "${NAG_DIR}/alarms")" -eq 1 ] # Verify TSV structure: idtimestampmessage local _line - _line="$(cat "${NAG_PATH}")" + _line="$(cat "${NAG_DIR}/alarms")" [[ "${_line}" =~ ^1$'\t'[0-9]+$'\t'$'\t'take\ a\ break$ ]] } @@ -161,7 +161,7 @@ load test_helper [[ "${output}" =~ "standup meeting" ]] # Verify TSV has rule in field 3. local _rule - _rule="$(cut -f3 "${NAG_PATH}")" + _rule="$(cut -f3 "${NAG_DIR}/alarms")" [ "${_rule}" = "weekday" ] } @@ -169,7 +169,7 @@ load test_helper run_nag every "tuesday,thursday" "tomorrow 3pm" standup [ "${status}" -eq 0 ] [[ "${output}" =~ "(tue, thu)" ]] - grep -q "tue,thu" "${NAG_PATH}" + grep -q "tue,thu" "${NAG_DIR}/alarms" } @test "every snaps to next matching day" { @@ -177,7 +177,7 @@ load test_helper run_nag every weekend "tomorrow 3pm" relax [ "${status}" -eq 0 ] local _ts _dow - _ts="$(cut -f2 "${NAG_PATH}")" + _ts="$(cut -f2 "${NAG_DIR}/alarms")" _dow="$(date -d "@${_ts}" +%u)" # Day-of-week should be 6 (Sat) or 7 (Sun). [[ "${_dow}" == "6" || "${_dow}" == "7" ]] diff --git a/test/test_helper.bash b/test/test_helper.bash index e0e1a59..9c334bf 100644 --- a/test/test_helper.bash +++ b/test/test_helper.bash @@ -4,14 +4,13 @@ _NAG="$(cd "$(dirname "${BATS_TEST_FILENAME}")/.." && pwd)/nag" setup() { - export NAG_PATH - NAG_PATH="$(mktemp)" - rm -f "${NAG_PATH}" + export NAG_DIR + NAG_DIR="$(mktemp -d)" export NAG_CMD="true" } teardown() { - rm -f "${NAG_PATH}" "${NAG_PATH}.lock" + rm -rf "${NAG_DIR}" } run_nag() {