9 ms·
Show HN: Bash Screensavers
A github project to collect a bunch of bash-based screensavers/visualizations.
- corranh 11mo agoVery cool! Reminds me of the various 90s movie pretend hacker typing screensavers like Neo-HackerTyper.
- seba_dos1 11mo agoCheck hollywood out then: https://github.com/dustinkirkland/hollywood https://github.com/dustinkirkland/hollywood
- Agingcoder 11mo agoWhy bother with Xwindow when you can have this ?
- prmoustache 11mo agoDo screens still need to be saved?
- blacksmith_tb 11mo agoOLEDs are famous for burning in[1], so potentially "yes". 1: https://www.pcworld.com/article/2918628/your-oled-displays-worst-enemy-burn-in-heres-how-to-fight-back.html https://www.pcworld.com/article/2918628/your-oled-displays-w...
- prmoustache 11mo agoDon't tell me they burn when showing nothing or going to sleep? We used to have screensavers with CRT because it took them a lot of time to power on and most early CRTs didn't have power saving capabilities so showing something wasn't significantly worse than having a black screen in term of power usage.
- jedberg 11mo agoI've never seen a repo that invites AI coders and then tells them how to behave [0]. I imagine we'll see more of this in the future. [0] https://github.com/attogram/bash-screensavers/blob/main/AGENTS.md https://github.com/attogram/bash-screensavers/blob/main/AGEN...
- chrysoprace 11mo agoAGENTS.md is an attempt to standardise around the different conventions each of the agents uses[0]. It's an initiative by OpenAI. Anthropic don't seem to be in a hurry to support it though[1], possibly to maintain some kind of walled garden, but that's purely speculation on my part. [0] https://agents.md/ https://agents.md/ [1] https://github.com/anthropics/claude-code/issues/6235 https://github.com/anthropics/claude-code/issues/6235
- attogram 11mo agoGallery of current screensavers: https://github.com/attogram/bash-screensavers/blob/main/gallery/README.md https://github.com/attogram/bash-screensavers/blob/main/gall...
- seba_dos1 11mo agoYou can put them onto your Plasma wallpaper and/or lockscreen background with plasma-wallpaper-application: https://invent.kde.org/dos/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 11mo agoAh, sweet! Do you know if this supports any DE (or no DE)? Or is it strictly for KDE Plasma?
- seba_dos1 11mo agoPlasma 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 11mo agoRight, 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 11mo agoNice. This makes them actual screensavers in my view as opposed to just animations. (Not that screens require "saving" any more, but still.)
- messe 11mo 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 11mo agoCool What are those commit messages?
- seba_dos1 11mo agoProtip for the author: --allow-empty ;P
- madsohm 11mo agoAI slop - or worse, somebody trying to hide something.
- warp 11mo ago
- alejoar 11mo agoDoesn't work for me on MacOS: I get "mapfile: command not found"
- SeeManDo 11mo agoSame here
- SeeManDo 11mo agoBash 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
- huhtenberg 11mo agoFor the 'life' screensaver it might make sense to use half blocks as a base rendering unit. ASCII 220 and 223.
- Evidlo 11mo agoWhy does the cursor flicker around the screen for most of these? Does it have something to do with not double buffering the display?
- attogram 11mo agoSome artifact from asciinema maybe. Only shows up in the preview gifs. Needs to be fixed!
- PessimalDecimal 11mo agoI'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 11mo agoWow! 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 11mo agoIt got mentioned briefly in an article in Mickey Petersen's excellent Mastering Emacs blog.
- LukeShu 11mo agoI know the trendy thing is to hide the menu-bar, but it's great for discoverability. Tools→Games→Zone Out
- hk1337 11mo agoThis reminds me of having a screensaver in DOS.
- adzm 11mo agoI 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.
- alka47 11mo ago[dead]
- LocoPadre 11mo agoRecommendation: 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_Sequence_Introducer_commands https://en.wikipedia.org/wiki/ANSI_escape_code#Control_Seque... [2]: https://unix.stackexchange.com/a/789031 https://unix.stackexchange.com/a/789031
- throwaway2037 11mo agoHow 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/library/README.md https://github.com/attogram/bash-screensavers/blob/main/libr... My favourite API: lov_die_with_honor()
- axiolite 11mo agoWith "matrix" causing bash to consume 46% of my CPU time, I think I'll pass. I think I can play the actual film in 4K with less CPU time than that.
- o11c 11mo agoHm, does caching the result of each unique `tput` fix that?
- axiolite 11mo agoI don't see any `tput`s inside the Main loop. Only at startup and exit. Comment at the top of my version (HEAD as of yesterday) says: # This version is optimized for speed by: # 1. Using direct ANSI escape codes instead of forking `tput` for every update.
- AdieuToLogic 11mo ago> My favourite API: lov_die_with_honor() A friend of mine fancied the following when making an infinite loop in C: #define MONEY 1 #define POWER 1 while (MONEY == POWER) { ... }
- panki27 11mo agoFor tmux users: you can use the lock-command option with something like cmatrix for a quick and dirty screensaver.
- _def 11mo agounfortunately 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 11mo agoNice! 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.
- nickstinemates 11mo agoYou 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 https://keeb.dev/static/login.mp4 2: https://github.com/ChrisBuilds/terminaltexteffects https://github.com/ChrisBuilds/terminaltexteffects
- skeptrune 11mo agoI 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 11mo agoI 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.
- deleted 11mo ago[deleted]
- culebron21 11mo agoIn 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 11mo agoNice! 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 11mo agofwiw I've noticed that Omarchy[1] uses some terminal-based screensavers, using something called tte[2] to do so. 1: https://omarchy.org/ https://omarchy.org/ 2: https://github.com/ChrisBuilds/terminaltexteffects https://github.com/ChrisBuilds/terminaltexteffects
- ratelimitsteve 11mo agoive 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 11mo agoOf 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 11mo agoNever 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!
- attogram 11mo agoGood catch! For folks curious about the rm -rf see https://github.com/attogram/bash-screensavers/blob/main/gallery/speaky/speaky.sh https://github.com/attogram/bash-screensavers/blob/main/gall... line 339
- dorianmariecom 11mo agoa 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
- axiolite 11mo agoJust an empty screen here... You're picking random positions on screen, and random colors, but then you don't display ANY text so the info is discarded and cells remain clear. After the printf, perhaps you want: tput smso; echo -n " " Then I find moving the second "clear" before the "while" makes it more interesting. Not sure if that's more like what you intended.
- dorianmariecom 11mo agoyeah hn blocks the square rectangle character