frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: Bash Screensavers

https://github.com/attogram/bash-screensavers
177•attogram•9h ago
A github project to collect a bunch of bash-based screensavers/visualizations.

Comments

attogram•9h ago
Gallery of current screensavers: https://github.com/attogram/bash-screensavers/blob/main/gall...
izabera•6h ago
they're generally pretty but they should really hide the cursor, it looks offputting in basically all cases
attogram•5h ago
Agreed! Known bug that will get squashed...
seba_dos1•9h ago
You can put them onto your Plasma wallpaper and/or lockscreen background with plasma-wallpaper-application: https://invent.kde.org/dos/plasma-wallpaper-application

(thought I'd share that since its raison d'être was to put Asciiquarium there :))

imiric•5h ago
Ah, sweet!

Do you know if this supports any DE (or no DE)? Or is it strictly for KDE Plasma?

seba_dos1•5h ago
Plasma wallpaper plugins are, well, for Plasma.

When it comes to wallpapers, you could do a similar trick on X11 DEs by putting it onto the root window (with a tool like xwinwrap) and on Wayland DEs that support layer-shell (with a tool like windowtolayer). I'm not aware of screen lockers that do something like that, but you could always write your own one.

imiric•4h ago
Right, but I hoped it would work as a standalone Qt app.

Yeah, I've used xwinwrap before, but am lost on Wayland. I'll look into windowtolayer, thanks. I'd rather not have to write this myself...

zahlman•2h ago
Nice. This makes them actual screensavers in my view as opposed to just animations. (Not that screens require "saving" any more, but still.)
messe•1h ago
> Not that screens require "saving" any more, but still.

OLEDs can still suffer from burn-in, but it's also just easier to have them... turn off...

FergusArgyll•8h ago
Cool

What are those commit messages?

seba_dos1•8h ago
Protip for the author: --allow-empty ;P
xxs•8h ago
instead of --amend?
seba_dos1•8h ago
Instead of adding or removing a space in random files when making cute and useless commit logs.
xxs•8h ago
that's what I meant - "amend" would not create any extra commits/entries
seba_dos1•8h ago
...which is not a helpful advice when what they clearly wanted is to create a bunch of extra commits.
kevincox•8h ago
But that doesn't change the files, so it won't show up in the tree view as the user is trying to accomplish.
madsohm•8h ago
AI slop - or worse, somebody trying to hide something.
warp•8h ago
Looks like an attempt to make the main GitHub page (the part above the README) display something interesting. It is messed up now because of further commits, but you can see what it looked like at the time here:

https://github.com/attogram/bash-screensavers/tree/a7369a93c...

attogram•8h ago
See the spread-the-word script in https://github.com/attogram/bash-screensavers/tree/main/spot... This script generates a series of shell commands to create a "spotlight" message on the main GitHub repository page. It does this by generating commands that make trivial changes to the top 12 files and directories and then commit those changes with custom messages.
alejoar•8h ago
Doesn't work for me on MacOS:

I get "mapfile: command not found"

SeeManDo•8h ago
Same here
SeeManDo•8h ago
Bash Screensavers v0.0.27 (Mystic Shine)

./screensaver.sh: line 79: mapfile: command not found 1 .

(Press ^C to exit)

Choose your screensaver: 1 404 Screensaver Not Found:

Oh no! Screensaver had trouble! Error code: 1

seba_dos1•8h ago
Get a Bash that's not ancient. mapfile is there since version 4.0 from 2009.
SeeManDo•8h ago
Seems to be a old version of bash installed and used by default on macos
SeeManDo•7h ago
Even after updating still getting the same error

checked active bash version:

echo $BASH_VERSION

5.3.3(1)-release

seba_dos1•7h ago
What's relevant is whether "/usr/bin/env bash" runs the correct one.
kridsdale3•36m ago
I used "brew install bash && brew info bash" to get the path, then ran that shell (zsh doesn't work), then inside that new bash, ran the screensaver app.

I found the 4k fullscreen perf in iTerm2 to be not-great, so I did it again in the kitty (GPU powered) terminal macos app, and it was good.

30minAdayHN•6h ago
I encountered this in another project. This should hopefully fix it:

zmodload zsh/mapfile

doodpants•5h ago
After installing bash via MacPorts, it works for me. All except #3 cutesaver, which gives an infinite loop of:

  cutesaver.sh: line 55: shuf: command not found
seba_dos1•5h ago
shuf has been a part of coreutils since 2006.
hinkley•2h ago
IIRC macOS is at least one major version behind in bash.
dylan604•39m ago
something something licensing something something

new installs default to bash not being the default terminal. someone else mentioned macports, but there's a new version available via brew as well

huhtenberg•8h ago
For the 'life' screensaver it might make sense to use half blocks as a base rendering unit. ASCII 220 and 223.
Evidlo•8h ago
Why does the cursor flicker around the screen for most of these? Does it have something to do with not double buffering the display?
attogram•8h ago
Some artifact from asciinema maybe. Only shows up in the preview gifs. Needs to be fixed!
PessimalDecimal•7h ago
I've used Emacs for years but just recently learned about zone.el. I wonder if this is based on it too. I see some of the same screensavers here.
blenderob•7h ago
Wow! The copyright of zone.el goes back to 2000. But this is the first time I hear about it! How did you find this gem?
PessimalDecimal•6h ago
It got mentioned briefly in an article in Mickey Petersen's excellent Mastering Emacs blog.
LukeShu•5h ago
I know the trendy thing is to hide the menu-bar, but it's great for discoverability. Tools→Games→Zone Out
hk1337•7h ago
This reminds me of having a screensaver in DOS.
adzm•6h ago
I thought the same thing. I remember being in elementary school and seeing one of these terminate-and-stay-resident / TSR joke things that made the smiley face ascii character bounce around the screen. That led me to finally move on from Pascal and dive into C to make one of my own, though I'm pretty sure it would be possible in Pascal, all the (very obscure) information I could find as a child used C examples. When I finally had one running that would "Moo!" at random places I felt like a real hacker.
LocoPadre•7h ago
Recommendation: Use the terminal control codes 1049h and 1049l [1][2] to keep the terminal 'clean'.

[1]: https://en.wikipedia.org/wiki/ANSI_escape_code#Control_Seque...

[2]: https://unix.stackexchange.com/a/789031

throwaway2037•6h ago
How can anyone have a bad day when great projects like this pop up on the front page of HN?

Did you see the library of viz? https://github.com/attogram/bash-screensavers/blob/main/libr...

My favourite API: lov_die_with_honor()

panki27•6h ago
For tmux users: you can use the lock-command option with something like cmatrix for a quick and dirty screensaver.
_def•6h ago
unfortunately quite inefficient, I'm sure higher framerates must be possible

(at least when running in docker, maybe that's the bottleneck, but I hesitated to run this on my machine directly)

imiric•5h ago
Nice! I won't use this since screensavers are much more interesting when not limited to characters, but this is a neat project.

Screensavers are a lost art. I still enjoy them, but at some point we just gave up on them. In the era of CRTs they had a practical purpose (they're screen savers, after all), but modern OLED displays also suffer from burn-in for which screensavers would be useful. My enjoyment is purely aesthetic, though. Sometimes I just want to have something pleasing to glance at in the background, instead of a black screen.

Nowadays most operating systems and desktop environments don't even support them. The state of the art on Linux still seems to be `xscreensaver`, which does have many great ones, but the collection is static, and most of it is visually stuck in the 90s. I wouldn't even try getting it to run on Wayland, and when I last looked into it, it required some hacks and 3rd-party tools.

Also, I've always found the feature of screen locking and screen saving to be orthogonal. Often I want to see pretty graphics without locking my screen, and viceversa.

corranh•5h ago
Very cool! Reminds me of the various 90s movie pretend hacker typing screensavers like Neo-HackerTyper.
seba_dos1•5h ago
Check hollywood out then: https://github.com/dustinkirkland/hollywood
nickstinemates•5h ago
You can also experiment and make your own[1] using TerminalTextEffects[2]. I added this to my ~/.zshrc

    > /home/keeb/code/projects/login/motd.sh
Which has..

    #!/usr/bin/env zsh

    values=("bubbles" "slide" "beams" "rain" "pour" "synthgrid" "unstable" "poop")
    len=${#values[@]}
    index=$(( (RANDOM % (len - 1)) + 1 ))
    selected=${values[$index]}

    cat /home/keeb/code/projects/login/motd | tte $selected
Change motd to have an ascii art of your choice. Run it in a loop if you want :)

1: https://keeb.dev/static/login.mp4 2: https://github.com/ChrisBuilds/terminaltexteffects

skeptrune•5h ago
I love seeing projects like this on the front page. They are so fun and can be little small tricks that improve your quality of life drastically.
jsmailes•5h ago
I like how all the tests seem to be contained within a "jury" folder which judges the merit of your code, made me smile - It's always nice for open-source/FOSS projects to retain a bit of whimsy and joy.
culebron21•3h ago
In the good ol' days, ~1990, Norton Commander had a screensaver with stars, similar to the one in the gallery readme, but with fewer stars, that grew from a dot to bigger dot, to shining, then bursted. Nice to see something like that again.
lucideer•2h ago
Nice!

First feature request: allow disabling all the `tput setab 0` calls throughout the codebase. This may make screensavers look weird on white terminals but should improve them for anyone using non-black-but-dark terminal themes.

rkapsoro•2h ago
fwiw I've noticed that Omarchy[1] uses some terminal-based screensavers, using something called tte[2] to do so.

1: https://omarchy.org/

2: https://github.com/ChrisBuilds/terminaltexteffects

ratelimitsteve•1h ago
ive always wanted to build something like this for divination, an X by Y field in which each cell is randomly assigned a character from a set which refreshes on a tick that you're meant to just gaze on and look for spontaneous patterns in, maybe with some conway game of life style rules about how cells can be more or less likely to update based on the states of their neighbors. Fork incoming.
LeoPanthera•1h ago
Of course, if used as an actual screensaver on a phosphor or plasma based screen, eventually the character grid would be burned into your screen.

A lot of screensavers, even historically, forget the original purpose of what "saving" your screen means.

dakinitribe•39m ago
Never a nice surprise when I find rm -rf / --no-preserve-root in a public repo, apart from this time!

Also, found one of the easter eggs!

dorianmariecom•26m ago
a simple one:

    #!/usr/bin/env bash

    _cleanup_and_exit() {
      tput cnorm
      tput sgr0
      clear
      exit 0
    }

    trap _cleanup_and_exit SIGINT

    while true; do
      width=$(tput cols)
      height=$(tput lines)

      tput setab 0
      clear
      tput civis

      x=$((RANDOM % width + 1))
      y=$((RANDOM % height + 1))
      color_code=$((RANDOM % 256))

      printf "\e[${y};${x}H\e[38;5;${color_code}m"

      sleep 1
    done
Agingcoder•12m ago
Why bother with Xwindow when you can have this ?

Show HN: Bash Screensavers

https://github.com/attogram/bash-screensavers
177•attogram•9h ago•59 comments

Show HN: ISS in Real Time – 25 Years Aboard the International Space Station

https://issinrealtime.org
111•bfeist•1d ago•13 comments

Show HN: Dexto – Connect your AI Agents with real-world tools and data

https://github.com/truffle-ai/dexto
14•shaunaks•4h ago•1 comments

Show HN: Apache Fory Rust – 10-20x faster serialization than JSON/Protobuf

https://fory.apache.org/blog/2025/10/29/fory_rust_versatile_serialization_framework/
48•chaokunyang•2h ago•18 comments

Show HN: Butter – A Behavior Cache for LLMs

https://www.butter.dev/
2•edunteman•1h ago•0 comments

Show HN: Tamagotchi P1 for FPGAs

https://github.com/agg23/fpga-tamagotchi
2•agg23•1h ago•0 comments

Show HN: OpenAI Apps Handbook

https://github.com/hemanth/OpenAI-Apps-Handbook
2•init0•1h ago•0 comments

Show HN: Rewriting Scratch 3.0 from scratch in Lua (browser-free native runtime)

https://github.com/fox2d-engine/ScratchLove
2•sixddc•3h ago•0 comments

Show HN: I made semantic search engine for engineering blogs and conferences

https://devblogs.sh/
9•iillexial•3h ago•0 comments

Show HN: JSON Query

https://jsonquerylang.org/
143•wofo•1d ago•68 comments

Show HN: VS Code extension to run/debug Go table tests

https://github.com/sergiobonfiglio/go-testing-plus
2•drakyoko•3h ago•0 comments

Show HN: Thymis.io Device management – images pre-loaded with your applications

https://thymis.io/
2•elikoga•3h ago•0 comments

Show HN: Linux CLI game, quiz, cheatsheet and map from my mind mapping app

https://mindmapsonline.com/linux_commands_quiz
5•max002•4h ago•0 comments

Show HN: Pipelex – declarative language for repeatable AI workflows (MIT)

https://github.com/Pipelex/pipelex
20•lchoquel•4h ago•4 comments

Show HN: Ordered – A sorted collection library for Zig

19•habedi0•15h ago•6 comments

Show HN: Erdos – open-source, AI data science IDE

https://www.lotas.ai/erdos
81•jorgeoguerra•1d ago•32 comments

Show HN: Dlog – Journaling and AI coach that learns what drives wellbeing (Mac)

https://dlog.pro/
43•dr-j•1d ago•32 comments

Show HN: Ball X Pit – Physics Roguelite with 42 Ball Evolutions

https://ballxpit.net/
3•aishu001•7h ago•0 comments

Show HN: Write Go code in JavaScript files

https://www.npmjs.com/package/vite-plugin-use-golang
151•yar-kravtsov•1d ago•45 comments

Show HN: Web extension to remove social metrics on web

https://trashpandaextension.com/
3•chiefofgxbxl•5h ago•0 comments

Show HN: MyraOS – My 32-bit operating system in C and ASM (Hack Club project)

https://github.com/dvir-biton/MyraOS
241•dvirbt•1d ago•54 comments

Show HN: Git Auto Commit (GAC) – LLM-powered Git commit command line tool

https://github.com/cellwebb/gac
50•merge-conflict•1d ago•32 comments

Show HN: I was tired of people dmming me just "hi", so I made this - NoGreeting

https://nogreeting.kuber.studio
8•kuberwastaken•11h ago•5 comments

Show HN: C# analyzer for error handling patterns in your including call graph

https://github.com/wieslawsoltes/ThrowsAnalyzer
2•wiso•8h ago•0 comments

Show HN: Helium Browser for Android with extensions support, based on Vanadium

https://github.com/jqssun/android-helium-browser
62•jqssun•1d ago•29 comments

Show HN: Shadcn/UI theme editor – Design and share Shadcn themes

https://shadcnthemer.com
132•miketromba•3d ago•40 comments

Show HN:Interactive RISC-V CPU Visualizer (Sequential and Pipelined)

https://mostlykiguess.github.io/RISC-V-Processor-Implementation/
2•mostlyk•14h ago•0 comments

Show HN: LLM Rescuer – Fixing the billion dollar mistake in Ruby

https://github.com/barodeur/llm_rescuer
95•barodeur•4d ago•14 comments

Show HN: Diagram as code tool with draggable customizations

https://github.com/RohanAdwankar/oxdraw
255•RohanAdwankar•3d ago•59 comments

Show HN: nblm - Rust CLI/Python SDK for NotebookLM Enterprise automation

https://github.com/K-dash/nblm-rs
10•K-dash•1d ago•0 comments