A different piece of ASCII art from asciiart.website, news headlines and a themed system summary at every login, with a Textual settings UI
Python
0
5 commits
updated Oct 1, 2026
A different piece of ASCII art every time you log in, picked from Christopher Johnson's ASCII Art Collection, with a quick system summary, news headlines and an oh-my-posh-style header, all fitted to the size of your screen.

Screenshots use made-up machine details and placeholder headlines. The art is real and always credited.
git clone https://github.com/vantfindthe/hothello.git ~/hothello
cd ~/hothello
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/hothello install # adds the login hook, then downloads a first batch of art and news
On Ubuntu, if python3 -m venv complains that ensurepip is missing, run sudo apt install python3-venv.
Without sudo you can use python3 -m venv --without-pip .venv and then
curl -sSL https://bootstrap.pypa.io/get-pip.py | .venv/bin/python.
To run hothello from anywhere, link it into a folder on your PATH:
ln -s ~/hothello/.venv/bin/hothello ~/.local/bin/hothello
Then open the settings UI with hothello, or change things from the command line (see Commands).
Developed and tested on Ubuntu 24.04 with bash. Hooks for zsh, fish, PowerShell (Windows) and a system-wide
/etc/update-motd.d script are included too.
hothello on hushlogin hides Ubuntu's plain version so it isn't shown twice.
Twelve built-in themes, each with header colours, an art gradient or rainbow, and frame and text colours.
hothello theme lists them all with a live sample, and hothello theme --import-omp builds a theme from the
colours of your oh-my-posh prompt.

Themes only colour hothello's own output. hothello never changes your terminal's colour scheme, background or font, and it doesn't touch your shell prompt (oh-my-posh, starship or anything else). A theme decides the colours of the text hothello prints when you log in (and in its previews), and that's all. The prompt that follows looks exactly as it did before.
- Most themes assume a dark terminal background; Catppuccin Latte is made for light ones.
- Classic uses your terminal's own 16-colour palette, so it follows whatever colour scheme your terminal has.
--import-omponly reads your oh-my-posh config to copy its colours into a new hothello theme; your oh-my-posh setup isn't modified.- The settings UI itself uses its own fixed look; the Theme tab's preview shows how your greeting will look.

hothello doesn't install or change fonts. Your terminal draws the text with whatever font it's set to use, on the machine you're sitting at. What hothello can choose is which symbols it prints:
| Glyph set | Needs | You get |
|---|---|---|
nerd | a Nerd Font | icons (clock, host, memory ...) and rounded, slanted or flame separators |
powerline | a Powerline-patched font | arrow separators, no icons |
unicode | any modern font | flat colour blocks, box-drawing frames, ▸ bullets |
ascii | anything, even a serial console | plain ASCII frames (+--+), * bullets, # bars |
auto (the default) picks nerd when oh-my-posh or starship is installed on the machine running
hothello (they need a Nerd Font too), or when NERD_FONT=1 is set; otherwise it picks unicode.auto
settles on unicode. If your terminal uses a Nerd Font, run hothello font nerd once on the server.hothello font mean your font is missing those symbols. Pick the richest set
that draws cleanly.auto reads what the terminal reports, but SSH usually doesn't pass on
truecolor support, so you may get 256 colours. If gradients look banded, run hothello color truecolor.
Everything (header, system summary, framed art, headlines and a couple of rows for your prompt) is budgeted into the screen size: your terminal's real size, fixed presets from 40x12 (phones and small SSH panes) up to 200x60, or a custom size. Art that doesn't fit isn't chosen (if nothing cached fits, the closest piece is centre-cropped, or skipped if you prefer). On short screens the headlines go first, then the system grid folds into a single alert line, so the art keeps its room and "restart required" stays visible.

Optional effects that reveal the greeting: lines, slide (right to left), wipe, rain, decode, nuke
or random. Try one with hothello animation nuke --try. Any key skips the animation, and it only runs when
the output is a terminal. Only changed characters are redrawn, so it stays light over SSH. The real text is
printed at the end, so scrollback and links are intact.

hothello privacy on hides your user and host names, IP addresses, the last-login address, OS and kernel
versions, uptime, memory and disk totals, and patch status (pending updates and "restart required" tell
people how up to date a machine is). Use HOTHELLO_PRIVACY=1 or hothello preview --private for a single
session.
| Tab | What you control |
|---|---|
| Art | Which categories to cycle (Space checks a category or a whole group; nothing checked means all), shuffle / rotate / random, every login / hourly / daily, prefer bigger pieces, hide flagged content, fetch more now |
| Display | Screen size presets or a custom size, smallest art worth showing, rows kept for your prompt, frame style, alignment, crop or skip when nothing fits, art name and source on or off, login animation |
| News | Built-in feeds, your own feeds (checked before they're added), how many headlines, per-source cap, max age, refresh interval, clickable links |
| System | Which facts to show, alerts, last login, usage bars, hiding the system's own login message, privacy mode |
| Theme | Theme, glyph set, colour depth, art colouring, header segments, greeting, date format, timezone, oh-my-posh import |
| Install | Login hooks for bash, zsh, fish and PowerShell, and the system-wide /etc/update-motd.d hook |
Keys: p full-screen preview at your real terminal size · a play the animation · n next art ·
f fetch art and news · q quit.
Everything in the settings UI can also be done from the command line. Commands that take a choice show the
options with a live example when you leave the choice off, and accept any unique prefix (hothello theme gruv).
hothello settings UI (also: hothello config)
hothello show | preview print the greeting; preview doesn't use up the art
--private, --animate STYLE, --no-animate, --width/--height, --color, --glyphs
hothello features every feature and whether it's on
hothello on|off|toggle NAME ... show / hide features: art headlines system header title credit frame
badges ages links bars alerts lastlogin network privacy animation color
flagged hushlogin (e.g. hothello off headlines credit)
hothello privacy [on|off] privacy mode for recordings (--alias NAME)
hothello theme [NAME] themes with examples (--import-omp [NAME|PATH] for oh-my-posh)
hothello font [NAME] glyph sets with examples: auto, nerd, powerline, unicode, ascii
hothello color [MODE] colour depth with examples: auto, truecolor, 256, 16, none
hothello frame [STYLE] frames with examples
hothello size [NAME|WxH] screen size presets, or a custom size like 100x30
hothello cycle [MODE] shuffle | rotate | random --every login|hourly|daily --prefer any|large
hothello categories [SEARCH] --add / --remove / --only NAME|GROUP|ID ... --clear --selected
hothello feeds --add ID|URL --remove ID|URL --name NAME
hothello headlines --count N --per-source N --max-age HOURS
hothello animation [STYLE] none lines slide wipe rain decode nuke random --speed --target all|art --try
hothello greeting [TEXT] e.g. hothello greeting 'Hey {user}, {greeting}!'
hothello get [KEY] | set KEY VALUE | reset [SECTION] --yes
hothello refresh fetch art and headlines now (--art, --news, --catalog)
hothello status paths, cache size, feed health, hook status
hothello install | uninstall [--target bash|zsh|fish|pwsh|powershell|update-motd] [--hushlogin]
Config lives in ~/.config/hothello/config.json (your own themes in themes/), and the cache in
~/.cache/hothello/hothello.db.
hothello show, which reads the local cache, prints, and exits in well under a
tenth of a second. It never touches the network and never breaks your login: errors are swallowed (set
HOTHELLO_DEBUG=1 to see them). It only runs in interactive shells, so ssh host cmd, scp and deploy scripts
are unaffected.hothello refresh --if-due when the news is older than the
refresh interval, when unseen art that fits is running low, or when you pick categories it hasn't fetched yet.sudo ~/hothello/.venv/bin/python -m hothello install --target update-motd
This copies your config to /var/lib/hothello and adds /etc/update-motd.d/60-hothello. pam_motd has no
terminal to measure, so choose a fixed size (for example Classic 80x24) first.
.venv/bin/pip install -e ".[dev]" && .venv/bin/pytest
The art is © its artists, is credited on every greeting with a link back to asciiart.website, and comes from Christopher Johnson's ASCII Art Collection. Headlines belong to their publishers and link to the original articles.
Python
100.0%
A different piece of ASCII art from asciiart.website, news headlines and a themed system summary at every login, with a Textual settings UI
Python
0
5 commits
updated Oct 1, 2026
A different piece of ASCII art every time you log in, picked from Christopher Johnson's ASCII Art Collection, with a quick system summary, news headlines and an oh-my-posh-style header, all fitted to the size of your screen.

Screenshots use made-up machine details and placeholder headlines. The art is real and always credited.
git clone https://github.com/vantfindthe/hothello.git ~/hothello
cd ~/hothello
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/hothello install # adds the login hook, then downloads a first batch of art and news
On Ubuntu, if python3 -m venv complains that ensurepip is missing, run sudo apt install python3-venv.
Without sudo you can use python3 -m venv --without-pip .venv and then
curl -sSL https://bootstrap.pypa.io/get-pip.py | .venv/bin/python.
To run hothello from anywhere, link it into a folder on your PATH:
ln -s ~/hothello/.venv/bin/hothello ~/.local/bin/hothello
Then open the settings UI with hothello, or change things from the command line (see Commands).
Developed and tested on Ubuntu 24.04 with bash. Hooks for zsh, fish, PowerShell (Windows) and a system-wide
/etc/update-motd.d script are included too.
hothello on hushlogin hides Ubuntu's plain version so it isn't shown twice.
Twelve built-in themes, each with header colours, an art gradient or rainbow, and frame and text colours.
hothello theme lists them all with a live sample, and hothello theme --import-omp builds a theme from the
colours of your oh-my-posh prompt.

Themes only colour hothello's own output. hothello never changes your terminal's colour scheme, background or font, and it doesn't touch your shell prompt (oh-my-posh, starship or anything else). A theme decides the colours of the text hothello prints when you log in (and in its previews), and that's all. The prompt that follows looks exactly as it did before.
- Most themes assume a dark terminal background; Catppuccin Latte is made for light ones.
- Classic uses your terminal's own 16-colour palette, so it follows whatever colour scheme your terminal has.
--import-omponly reads your oh-my-posh config to copy its colours into a new hothello theme; your oh-my-posh setup isn't modified.- The settings UI itself uses its own fixed look; the Theme tab's preview shows how your greeting will look.

hothello doesn't install or change fonts. Your terminal draws the text with whatever font it's set to use, on the machine you're sitting at. What hothello can choose is which symbols it prints:
| Glyph set | Needs | You get |
|---|---|---|
nerd | a Nerd Font | icons (clock, host, memory ...) and rounded, slanted or flame separators |
powerline | a Powerline-patched font | arrow separators, no icons |
unicode | any modern font | flat colour blocks, box-drawing frames, ▸ bullets |
ascii | anything, even a serial console | plain ASCII frames (+--+), * bullets, # bars |
auto (the default) picks nerd when oh-my-posh or starship is installed on the machine running
hothello (they need a Nerd Font too), or when NERD_FONT=1 is set; otherwise it picks unicode.auto
settles on unicode. If your terminal uses a Nerd Font, run hothello font nerd once on the server.hothello font mean your font is missing those symbols. Pick the richest set
that draws cleanly.auto reads what the terminal reports, but SSH usually doesn't pass on
truecolor support, so you may get 256 colours. If gradients look banded, run hothello color truecolor.
Everything (header, system summary, framed art, headlines and a couple of rows for your prompt) is budgeted into the screen size: your terminal's real size, fixed presets from 40x12 (phones and small SSH panes) up to 200x60, or a custom size. Art that doesn't fit isn't chosen (if nothing cached fits, the closest piece is centre-cropped, or skipped if you prefer). On short screens the headlines go first, then the system grid folds into a single alert line, so the art keeps its room and "restart required" stays visible.

Optional effects that reveal the greeting: lines, slide (right to left), wipe, rain, decode, nuke
or random. Try one with hothello animation nuke --try. Any key skips the animation, and it only runs when
the output is a terminal. Only changed characters are redrawn, so it stays light over SSH. The real text is
printed at the end, so scrollback and links are intact.

hothello privacy on hides your user and host names, IP addresses, the last-login address, OS and kernel
versions, uptime, memory and disk totals, and patch status (pending updates and "restart required" tell
people how up to date a machine is). Use HOTHELLO_PRIVACY=1 or hothello preview --private for a single
session.
| Tab | What you control |
|---|---|
| Art | Which categories to cycle (Space checks a category or a whole group; nothing checked means all), shuffle / rotate / random, every login / hourly / daily, prefer bigger pieces, hide flagged content, fetch more now |
| Display | Screen size presets or a custom size, smallest art worth showing, rows kept for your prompt, frame style, alignment, crop or skip when nothing fits, art name and source on or off, login animation |
| News | Built-in feeds, your own feeds (checked before they're added), how many headlines, per-source cap, max age, refresh interval, clickable links |
| System | Which facts to show, alerts, last login, usage bars, hiding the system's own login message, privacy mode |
| Theme | Theme, glyph set, colour depth, art colouring, header segments, greeting, date format, timezone, oh-my-posh import |
| Install | Login hooks for bash, zsh, fish and PowerShell, and the system-wide /etc/update-motd.d hook |
Keys: p full-screen preview at your real terminal size · a play the animation · n next art ·
f fetch art and news · q quit.
Everything in the settings UI can also be done from the command line. Commands that take a choice show the
options with a live example when you leave the choice off, and accept any unique prefix (hothello theme gruv).
hothello settings UI (also: hothello config)
hothello show | preview print the greeting; preview doesn't use up the art
--private, --animate STYLE, --no-animate, --width/--height, --color, --glyphs
hothello features every feature and whether it's on
hothello on|off|toggle NAME ... show / hide features: art headlines system header title credit frame
badges ages links bars alerts lastlogin network privacy animation color
flagged hushlogin (e.g. hothello off headlines credit)
hothello privacy [on|off] privacy mode for recordings (--alias NAME)
hothello theme [NAME] themes with examples (--import-omp [NAME|PATH] for oh-my-posh)
hothello font [NAME] glyph sets with examples: auto, nerd, powerline, unicode, ascii
hothello color [MODE] colour depth with examples: auto, truecolor, 256, 16, none
hothello frame [STYLE] frames with examples
hothello size [NAME|WxH] screen size presets, or a custom size like 100x30
hothello cycle [MODE] shuffle | rotate | random --every login|hourly|daily --prefer any|large
hothello categories [SEARCH] --add / --remove / --only NAME|GROUP|ID ... --clear --selected
hothello feeds --add ID|URL --remove ID|URL --name NAME
hothello headlines --count N --per-source N --max-age HOURS
hothello animation [STYLE] none lines slide wipe rain decode nuke random --speed --target all|art --try
hothello greeting [TEXT] e.g. hothello greeting 'Hey {user}, {greeting}!'
hothello get [KEY] | set KEY VALUE | reset [SECTION] --yes
hothello refresh fetch art and headlines now (--art, --news, --catalog)
hothello status paths, cache size, feed health, hook status
hothello install | uninstall [--target bash|zsh|fish|pwsh|powershell|update-motd] [--hushlogin]
Config lives in ~/.config/hothello/config.json (your own themes in themes/), and the cache in
~/.cache/hothello/hothello.db.
hothello show, which reads the local cache, prints, and exits in well under a
tenth of a second. It never touches the network and never breaks your login: errors are swallowed (set
HOTHELLO_DEBUG=1 to see them). It only runs in interactive shells, so ssh host cmd, scp and deploy scripts
are unaffected.hothello refresh --if-due when the news is older than the
refresh interval, when unseen art that fits is running low, or when you pick categories it hasn't fetched yet.sudo ~/hothello/.venv/bin/python -m hothello install --target update-motd
This copies your config to /var/lib/hothello and adds /etc/update-motd.d/60-hothello. pam_motd has no
terminal to measure, so choose a fixed size (for example Classic 80x24) first.
.venv/bin/pip install -e ".[dev]" && .venv/bin/pytest
The art is © its artists, is credited on every greeting with a link back to asciiart.website, and comes from Christopher Johnson's ASCII Art Collection. Headlines belong to their publishers and link to the original articles.
Python
100.0%