Mini Guide: Rich MOTD messages with Markdown and glow

Mini Guide: Rich MOTD messages with Markdown and glow

A Message of The Day (MOTD) banner is probably fairly familiar to those of us who SSH around, but how about a richly formatted message with colour and style?

This mini-guide explains how to add a richly formatted MOTD banner that is displayed to any user starting a new terminal session, whether over SSH or physically.

Motivation

I recently moved my home server from a Dell R710 to a Raspberry Pi 4 and in the process I wanted to consolidate and version control as much configuration as possible as well as standardising how services are run (with Docker) and deployed (with GitHub Actions).

Most of that is probably a story for another post.

The repository contains a README with guidance that is useful when managing the server and so I wanted to display it on login.

The README is formatted with Markdown as is fairly standard, and while Markdown looks ok when cat'd, it's still all the same colour and risks becoming a wall of text.

The README.md

The image below shows both the content of the README as well as how it looks when rendered directly by the terminal.

Glow

Enter glow which claims to "Render markdown on the CLI, with pizzazz!"

And it certainly does that:

Glow Demo

It does plenty more too - you can browse and navigate markdown, as well as controlling styling options - full details can be found at: https://github.com/charmbracelet/glow

The final bonus - it is available through the majority of mainstream package managers either directly or via a repo, including on arm64 Debian/Ubuntu - perfect for the Pi.

I was keen to avoid scripts or solutions requiring compilation as some of the other options did.

Running on login

Starting a new session whether over SSH or physically is effectively a new login, even changing user with sudo/su is a new session.

A number of files can be executed on login including those in /etc/profile.d/ and these apply to all users that have a shell that respects profile conventions.

So I have an executable file called run_on_loggin.sh:

#!/bin/bash

echo "Notes in: /home/paul/home-stack/README.md"
glow /home/paul/home-stack/README.md

Which simply echos a bit of information and then renders the README.md file with glow.

The Result

This is a fresh SSH login:

Perfect.