Create a gist now

Instantly share code, notes, and snippets.

@sontek /snowjob.sh
Last active Jan 28, 2016

Make your terminal snow
#!/bin/bash
LINES=$(tput lines)
COLUMNS=$(tput cols)
declare -A snowflakes
declare -A lastflakes
clear
function move_flake() {
i="$1"
if [ "${snowflakes[$i]}" = "" ] || [ "${snowflakes[$i]}" = "$LINES" ]; then
snowflakes[$i]=0
else
if [ "${lastflakes[$i]}" != "" ]; then
printf "\033[%s;%sH \033[1;1H " ${lastflakes[$i]} $i
fi
fi
printf "\033[%s;%sH\u274$[($RANDOM%6)+3]\033[1;1H" ${snowflakes[$i]} $i
lastflakes[$i]=${snowflakes[$i]}
snowflakes[$i]=$((${snowflakes[$i]}+1))
}
while :
do
i=$(($RANDOM % $COLUMNS))
move_flake $i
for x in "${!lastflakes[@]}"
do
move_flake "$x"
done
sleep 0.1
done
@sontek
Owner

If your terminal font supports it you can replace * at line 22 with ❄ to make it more festive

@amstan

Can you make it appear on top of something that's already running?

@x37v

awesome!

@allaun

I named the script as snowjob, and this is the output?
snowjob: 11: Syntax error: "(" unexpected

@supercheetah

Like it!

@sontek
Owner

@allaun What shell are you using? You can replace function move_flake() with function move_flake (removing the parens) and it'll work for you

@EmbeddedLinuxGuy

Nice. Also you can rotate different flake glyphs if you replace * with \u274"$[($RANDOM%6)+3]"

@sontek
Owner

@EmbeddedLinuxGuy That is awesome, thanks!

@skihero

cool!

@blottis

Thanks for the script it is very cool, but could you provides us with some additional info about how to make it more functional ... for example how to make the snow appear on a functional terminal screen as @amstan stated in his comment. I am new with bash scripting and want to use your code to decorate a script I am creating but I can not deduce where to put my code... thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment