389 lines
8.7 KiB
Bash
Executable File
389 lines
8.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# This holiday decoration script was put together by Bryan Lunduke.
|
|
# www.Lunduke.com
|
|
#
|
|
# Some portions were inspired or copied from other works. Where that is
|
|
# the case it is noted within the source.
|
|
#
|
|
|
|
# Reset
|
|
Color_Off='\033[0m' # Text Reset
|
|
|
|
# Regular Colors
|
|
Black='\033[0;30m' # Black
|
|
Red='\033[0;31m' # Red
|
|
Green='\033[0;32m' # Green
|
|
Yellow='\033[0;33m' # Yellow
|
|
Blue='\033[0;34m' # Blue
|
|
Purple='\033[0;35m' # Purple
|
|
Cyan='\033[0;36m' # Cyan
|
|
White='\033[0;37m' # White
|
|
|
|
# Bold
|
|
BBlack='\033[1;30m' # Black
|
|
BRed='\033[1;31m' # Red
|
|
BGreen='\033[1;32m' # Green
|
|
BYellow='\033[1;33m' # Yellow
|
|
BBlue='\033[1;34m' # Blue
|
|
BPurple='\033[1;35m' # Purple
|
|
BCyan='\033[1;36m' # Cyan
|
|
BWhite='\033[1;37m' # White
|
|
|
|
|
|
|
|
|
|
ShowTree () {
|
|
#
|
|
# The base of this animated tree was copied from ChrisBASHTree
|
|
# https://github.com/sergiolepore/ChristBASHTree
|
|
#
|
|
trap "tput reset; tput cnorm; exit" 2
|
|
clear
|
|
tput civis
|
|
lin=2
|
|
col=$(($(tput cols) / 2))
|
|
c=$((col-1))
|
|
est=$((c-2))
|
|
color=0
|
|
tput setaf 2; tput bold
|
|
|
|
# Tree
|
|
for ((i=1; i<20; i+=2))
|
|
{
|
|
tput cup $lin $col
|
|
for ((j=1; j<=i; j++))
|
|
{
|
|
echo -n \*
|
|
}
|
|
let lin++
|
|
let col--
|
|
}
|
|
|
|
tput sgr0; tput setaf 3
|
|
|
|
# Trunk
|
|
for ((i=1; i<=2; i++))
|
|
{
|
|
tput cup $((lin++)) $c
|
|
echo 'mWm'
|
|
}
|
|
new_year=$(date +'%Y')
|
|
let new_year++
|
|
tput setaf 1; tput bold
|
|
|
|
tput cup $lin $((c - 6)); echo MERRY CHRISTMAS
|
|
|
|
let c++
|
|
k=1
|
|
|
|
# Lights and decorations
|
|
while true; do
|
|
for ((i=1; i<=35; i++)) {
|
|
# Turn off the lights
|
|
[ $k -gt 1 ] && {
|
|
tput setaf 2; tput bold
|
|
tput cup ${line[$[k-1]$i]} ${column[$[k-1]$i]}; echo \*
|
|
unset line[$[k-1]$i]; unset column[$[k-1]$i] # Array cleanup
|
|
}
|
|
|
|
li=$((RANDOM % 9 + 3))
|
|
start=$((c-li+2))
|
|
co=$((RANDOM % (li-2) * 2 + 1 + start))
|
|
tput setaf $color; tput bold # Switch colors
|
|
tput cup $li $co
|
|
echo o
|
|
line[$k$i]=$li
|
|
column[$k$i]=$co
|
|
color=$(((color+1)%8))
|
|
# Flashing text
|
|
sh=1
|
|
for l in C O D E
|
|
do
|
|
tput cup $((lin+1)) $((c+sh))
|
|
#echo $l
|
|
let sh++
|
|
sleep 0.01
|
|
done
|
|
}
|
|
k=$((k % 2 + 1))
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
ShowMenorah () {
|
|
|
|
|
|
# Draw the Menorah
|
|
clear
|
|
echo
|
|
echo
|
|
echo
|
|
|
|
|
|
echo -e "${Blue} |"
|
|
echo -e "${Blue} | | | | | | | | |"
|
|
echo -e "${Blue} | | | | | | | | |"
|
|
echo -e "${Blue} | | | | | | | | |"
|
|
echo -e "${Blue} \ \ \ \ | / / / /"
|
|
echo -e "${Blue} \ \ \ \_|_/ / / /"
|
|
echo -e "${Blue} \ \ \ | / / /"
|
|
echo -e "${Blue} \ \ \__|__/ / / Happy Hanukkah!"
|
|
echo -e "${Blue} \ \ | / / ${White}Chag Hanukkah sameach!"
|
|
echo -e "${Blue} \ \___|___/ /"
|
|
echo -e "${Blue} \ | /"
|
|
echo -e "${Blue} \____|____/"
|
|
echo -e "${Blue} |"
|
|
echo -e "${Blue} __|__"
|
|
echo -e "${Blue} ____|____"
|
|
|
|
|
|
|
|
# Count the candles for each night
|
|
while true; do
|
|
for ((i=1; i<=9; i++)) {
|
|
|
|
tput cup 2 0; echo -e "${White} |"
|
|
|
|
if [ $i -eq 1 ]
|
|
then # Night 0 - Shamash only
|
|
tput cup 2 0; echo -e "${White} |"
|
|
tput cup 3 0; echo -e "${White} ${Blue} | ${White} "
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Shamash only"
|
|
|
|
elif [ $i -eq 2 ]
|
|
then # Night 1
|
|
tput cup 3 0; echo -e "${White} ${Blue} | ${White} |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 1 "
|
|
|
|
elif [ $i -eq 3 ]
|
|
then # Night 2
|
|
tput cup 3 0; echo -e "${White} ${Blue} | ${White} | |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 2 "
|
|
|
|
elif [ $i -eq 4 ]
|
|
then # Night 3
|
|
tput cup 3 0; echo -e "${White} ${Blue} | ${White} | | |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 3 "
|
|
|
|
elif [ $i -eq 5 ]
|
|
then # Night 4
|
|
tput cup 3 0; echo -e "${White} ${Blue} | ${White}| | | |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 4 "
|
|
|
|
elif [ $i -eq 6 ]
|
|
then # Night 5
|
|
tput cup 3 0; echo -e "${White} | ${Blue} | ${White}| | | |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 5 "
|
|
|
|
elif [ $i -eq 7 ]
|
|
then # Night 6
|
|
tput cup 3 0; echo -e "${White} | | ${Blue} | ${White}| | | |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 6 "
|
|
|
|
elif [ $i -eq 8 ]
|
|
then # Night 7
|
|
tput cup 3 0; echo -e "${White} | | | ${Blue} | ${White}| | | |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 7 "
|
|
|
|
elif [ $i -eq 9 ]
|
|
then # Night 8
|
|
tput cup 3 0; echo -e "${White} | | | | ${Blue} | ${White}| | | |"
|
|
tput cup 6 0; echo -e "${Blue} | | | | | | | | | ${White}Night 8 "
|
|
|
|
fi
|
|
|
|
|
|
sleep 0.5
|
|
}
|
|
|
|
done
|
|
|
|
|
|
}
|
|
|
|
|
|
function colorstr()
|
|
{
|
|
local row=$1
|
|
local col=$2
|
|
local color=$3
|
|
local v
|
|
case "$color" in
|
|
red) v=31;;
|
|
green) v=34;;
|
|
blue) v=32;;
|
|
purple) v=35;;
|
|
cyan) v=36;;
|
|
yellow) v=33;;
|
|
brown) v=33;;
|
|
white) v=37;;
|
|
*) v=;;
|
|
esac
|
|
shift 3
|
|
|
|
if [[ $multiple -ne 0 ]]; then
|
|
touch $lock_file
|
|
while [[ $(ls $lock_file_base.* 2>/dev/null | head -n 1) != $lock_file ]]
|
|
do
|
|
sleep 0.05
|
|
done
|
|
fi
|
|
|
|
tput cup $row $col
|
|
echo -n -e "\e["$v"m"
|
|
set -f
|
|
echo -n $*
|
|
set +f
|
|
if [[ $multiple -ne 0 ]]; then
|
|
rm -f $lock_file
|
|
fi
|
|
}
|
|
|
|
function center_colorstr()
|
|
{
|
|
local row=$1
|
|
local color=$2
|
|
shift 2
|
|
local s="$*"
|
|
local slen=${#s}
|
|
colorstr $row $(((cols / 2) - (slen / 2))) $color "$s"
|
|
}
|
|
|
|
function fireworks()
|
|
{
|
|
local row=$((rows - 1))
|
|
local col=$(((RANDOM % (cols / 2)) + (cols / 4)))
|
|
local height=$((RANDOM % rows - 2))
|
|
local slant
|
|
local h
|
|
local color1=${colors[$((RANDOM % ${#colors[*]}))]}
|
|
local color2=${colors[$((RANDOM % ${#colors[*]}))]}
|
|
local color3=${colors[$((RANDOM % ${#colors[*]}))]}
|
|
while [[ $color1 == $color2 || $color1 == $color3 || $color2 == $color3 ]]
|
|
do
|
|
color2=${colors[$((RANDOM % ${#colors[*]}))]}
|
|
color3=${colors[$((RANDOM % ${#colors[*]}))]}
|
|
done
|
|
|
|
case $((RANDOM % 4)) in
|
|
0) slant=-2;;
|
|
1) slant=-1;;
|
|
2) slant=1;;
|
|
3) slant=2;;
|
|
esac
|
|
|
|
if [[ $height -gt 5 ]]; then
|
|
h=$height
|
|
|
|
while [[ $h -gt 0 ]]
|
|
do
|
|
colorstr $row $col $color1 '.'
|
|
let row--
|
|
if [[ $((col + slant)) -ge $((cols - 3)) || $((col + slant)) -le 2 ]]; then break; fi
|
|
let col+=slant
|
|
let h--
|
|
sleep 0.1
|
|
done
|
|
|
|
if [[ $((col + slant)) -lt $((cols - 3)) && $((col + slant)) -gt 2 ]]; then
|
|
|
|
h=$((height / 5))
|
|
|
|
while [[ $h -gt 0 ]]
|
|
do
|
|
colorstr $row $col $color2 '.'
|
|
let row++
|
|
if [[ $((col + slant)) -ge $((cols - 3)) || $((col + slant)) -le 2 ]]; then break; fi
|
|
let col+=slant
|
|
let h--
|
|
sleep 0.1
|
|
done
|
|
fi
|
|
|
|
colorstr $((row)) $((col - 1)) $color3 '***'
|
|
colorstr $((row - 1)) $((col)) $color3 '*'
|
|
colorstr $((row + 1)) $((col)) $color3 '*'
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
function runFireworks()
|
|
{
|
|
|
|
rows=$(tput lines)
|
|
cols=$(tput cols)
|
|
colors=(red green blue purple cyan yellow brown)
|
|
lock_file=
|
|
lock_file_base=/tmp/$(basename $0 .sh)
|
|
|
|
multiple=0
|
|
if [[ "$1" ]]; then
|
|
nsingle=$1
|
|
shift
|
|
else
|
|
nsingle=10
|
|
fi
|
|
if [[ "$1" ]]; then
|
|
nmultiple=$1
|
|
shift
|
|
if [[ $nmultiple -gt 8 ]]; then nmultiple=8; fi
|
|
else
|
|
nmultiple=6
|
|
fi
|
|
|
|
clear
|
|
|
|
until [ 1 -eq 2 ]
|
|
do
|
|
sleep 1
|
|
clear
|
|
|
|
pids=
|
|
for i in $(seq 1 $nmultiple)
|
|
do
|
|
let multiple++
|
|
lock_file=$lock_file_base.$i
|
|
fireworks &
|
|
pids="$pids $!"
|
|
done
|
|
|
|
trap "kill -9 $pids 2>/dev/null" EXIT
|
|
|
|
wait $pids
|
|
|
|
done
|
|
|
|
clear
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if [ "$1" = "Tree" ]
|
|
|
|
then
|
|
ShowTree
|
|
exit
|
|
|
|
elif [ "$1" = "Menorah" ]
|
|
then
|
|
ShowMenorah
|
|
exit
|
|
|
|
elif [ "$1" = "Fireworks" ]
|
|
then
|
|
runFireworks
|
|
exit
|
|
|
|
else
|
|
echo -e "${White}Possible options for Lunduke's Shell Holiday Decorations: ${Blue}Tree Menorah Fireworks"
|
|
exit
|
|
fi
|
|
|