From 4e06a5ed225c72954f03d12c07aa8bc33fbcd78f Mon Sep 17 00:00:00 2001 From: Michael Prokop Date: Sat, 16 Sep 2023 12:19:23 +0200 Subject: [PATCH] Improve easter egg for 20 years of grml.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Relevant changes: 1) Don't convert dates via date(1), but provide epoch seconds right away 2) Also use zsh's ${EPOCHSECONDS} instead of forking to date(1) 3) Display easter egg message with einfo iff we are within the birthday range 4) Don't display easter egg only on 2023-09-16 and one month later, but instead have the easter egg appear randomly, with diminishing probability as you get farther from the actual birthday 5) Don't display anything at all when booting with noeasteregg boot option Thanks: Christopher Bock and András Korn --- autoconfig.functions | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/autoconfig.functions b/autoconfig.functions index b7d694c..254129b 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -1993,18 +1993,9 @@ fi # }}} # {{{ Easteregg (for 20 years grml.org) -config_easteregg() { - current_date=$(date +%Y-%m-%d) - birthday="2023-09-16" - one_month_later=$(date -d "${current_date} + 1 month" +%Y-%m-%d) - +display_easteregg() { einfo "You found the birthday easter egg!" ; eend 0 - # nothing to be done if it's more than one month since $birthday - if ! [[ "${current_date}" == "${birthday}" || "${current_date}" == "${one_month_later}" ]]; then - return 0 - fi - if [[ -x /bin/toilet && -x /usr/games/lolcat ]] ; then visualize() { printf "%s\n" "$*" | toilet | /usr/games/lolcat ; } elif [[ -x /bin/toilet ]] ; then @@ -2017,6 +2008,26 @@ config_easteregg() { visualize "20 years" visualize "grml.org" } + +config_easteregg() { + checkbootparam 'noeasteregg' && return 0 + + zmodload zsh/datetime 2>/dev/null || return 0 + zmodload zsh/mathfunc 2>/dev/null || return 0 + + local birthday=1694822400 # := 2023-09-16 -> TZ=UTC date -d "2023-09-16" +%s + local one_month=$[24*30*3600] + local pi=3.14159265358979323846 + local magic=$(( one_month/(pi/2) )) # normalization factor, used to map the [birthday;birthday+-one_month] range onto [0;+-pi/2] + + if [[ $(( abs(birthday-EPOCHSECONDS) )) -le $one_month ]] ; then + if [[ $(( rand48() )) -le $(( cos((birthday-EPOCHSECONDS)/magic) )) ]] ; then + display_easteregg + fi + fi + + return 0 +} # }}} ## END OF FILE ################################################################# -- 2.1.4