Skip to content

Instantly share code, notes, and snippets.

@alexfornuto
Last active May 8, 2024 15:44
Show Gist options
  • Save alexfornuto/f2f6ffa423bd5bc21c5e to your computer and use it in GitHub Desktop.
Save alexfornuto/f2f6ffa423bd5bc21c5e to your computer and use it in GitHub Desktop.
Matrix Bash Script
#!/bin/bash
#
# matrix: matrix-ish display for Bash terminal
# Author: Brett Terpstra 2012 <http://brettterpstra.com>
# Contributors: Lauri Ranta and Carl <http://blog.carlsensei.com/>
#
# A morning project. Could have been better, but I'm learning when to stop.
### Customization:
blue="\033[0;34m"
brightblue="\033[1;34m"
cyan="\033[0;36m"
brightcyan="\033[1;36m"
green="\033[0;32m"
brightgreen="\033[1;32m"
red="\033[0;31m"
brightred="\033[1;31m"
white="\033[1;37m"
black="\033[0;30m"
grey="\033[0;37m"
darkgrey="\033[1;30m"
# Choose the colors that will be used from the above list
# space-separated list
# e.g. `colors=($green $brightgreen $darkgrey $white)`
colors=($green $brightgreen)
### End customization
### Do not edit below this line
spacing=${1:-100} # the likelihood of a character being left in place
scroll=${2:-0} # 0 for static, positive integer determines scroll speed
screenlines=$(expr `tput lines` - 1 + $scroll)
screencols=$(expr `tput cols` / 2 - 1)
# chars=(a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ^)
# charset via Carl:
chars=(ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン)
count=${#chars[@]}
colorcount=${#colors[@]}
trap "tput sgr0; clear; exit" SIGTERM SIGINT
if [[ $1 =~ '-h' ]]; then
echo "Display a Matrix(ish) screen in the terminal"
echo "Usage: matrix [SPACING [SCROLL]]"
echo "Example: matrix 100 0"
exit 0
fi
clear
tput cup 0 0
while :
do for i in $(eval echo {1..$screenlines})
do for i in $(eval echo {1..$screencols})
do rand=$(($RANDOM%$spacing))
case $rand in
0)
printf "${colors[$RANDOM%$colorcount]}${chars[$RANDOM%$count]} "
;;
1)
printf " "
;;
*)
printf "\033[2C"
;;
esac
done
printf "\n"
# sleep .005
done
tput cup 0 0
done
# A change to prove that the url stays the same if edited.
@alexfornuto
Copy link
Author

Not mine, just here for easy access.

@MaymoonaAlBoloshi
Copy link

MaymoonaAlBoloshi commented Feb 26, 2023

bash <(curl -sL https://gist.githubusercontent.com/alexfornuto/f2f6ffa423bd5bc21c5e/raw/matrix.sh)

a quick way to execute it without having to have the script on your machine 😁 , for anyone who wanna try it out 😇

@alexfornuto
Copy link
Author

Oh my gawsh someone is still looking at this!

@MaymoonaAlBoloshi
Copy link

haha yup. it's pretty cool tbh

@Digital-gitz
Copy link

haha cool you can execute with curl without hosting the file. thanks @MaymoonaAlBolosh.

@joaosantino
Copy link

Nice!!! 🔥

@alexfornuto
Copy link
Author

Seeing as the PR owner can edit gists (see L76) without the URL changing, I would advice against curling directly into bash. Sure, I'm a swell guy who would never edit this gist to be malicious, but you shouldn't take my word for it.

@tudorvasinca
Copy link

Even a better one:
bash <(curl -sL https://bruxy.regnet.cz/linux/matrix/matrix.sh)

@alexfornuto
Copy link
Author

Even a better one: bash <(curl -sL https://bruxy.regnet.cz/linux/matrix/matrix.sh)

I would trust non-github download locations even less, and would suggest not downloading from them without thorough research of the source first.

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