Skip to content

Commit

Permalink
Improve easter egg for 20 years of grml.org
Browse files Browse the repository at this point in the history
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 also in all the days in between (sigh :))
5) Don't display anything at all when booting with noeasteregg boot option
6) Have the easter egg appear randomly, with diminishing probability as
   you get farther from the actual birthday

Thanks: Christopher Bock and András Korn
  • Loading branch information
mika committed Sep 16, 2023
1 parent 2b0f0ee commit f49399d
Showing 1 changed file with 21 additions and 10 deletions.
31 changes: 21 additions & 10 deletions autoconfig.functions
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 #################################################################
Expand Down

0 comments on commit f49399d

Please sign in to comment.