ChromeOS hterm (“Secure Shell extension”) is one of my favorite chrome extensions. It is a bit dull with its out-of-the-box monospace font though. In this post we’ll learn how to customize it.

Google Fonts

The easiest way to customize the Secure Shell extension to use a custom font is to select one from Google Fonts. Once you select a font from there, it will give you information like this:

Use on the web
To embed a font, copy the code into the <head> of your html
( ) <link> (x) @import

<style>
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans&display=swap');
</style>

font-family: 'IBM Plex Sans', sans-serif;

All we have to do is to copy the URL within the url('...') fragment above, go to the settings of the Secure Shell extension, and then paste it there:

# Example 1: IBM Plex Sans
Custom CSS (URI): https://fonts.googleapis.com/css2?family=IBM+Plex+Sans&display=swap

# Example 2: Fira Code
Custom CSS (URI): https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&display=swap

# Example 3: Combine both
https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&family=IBM+Plex+Sans&display=swap

And then set the extension to use it:

Text font family: "IBM Plex Sans", "Fira Code", monospace

From Secure Shell FAQ:

By default, we disable ligatures. Some fonts actively enable them like macOS’s Menlo (e.g. “ae” is rendered as “æ”). This messes up copying and pasting and is, arguably, not terribly legible for a terminal.

If your font supports ligatures, consider enabling them:

Custom CSS (inline text):

* {
    -webkit-font-feature-settings: "liga" on, "calt" on;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
}

Not all fonts are available on Google Fonts though. For example, Hermit is one of my current monospace favorites: it’s not there1.

Github

Many fonts are available on GitHub (or in other forges), checked into a git repository.

If you happen to find a .woff2 web font file laying therein, you could also use it in hterm:

Custom CSS (inline text):

@font-face {
  font-family: "Anonymous Pro";
  src: url(https://cdn.rawgit.com/wernight/powerline-web-fonts/8040cf32c146c7cd4f776c1484d23dc40685c1bc/fonts/AnonymousPro.woff2);
}

And then set the extension to use it:

Text font family: "Anonymous Pro", monospace

Note: I couldn’t get this method to work with .ttf or .otf.