Omarchy themes your desktop. OmaTTY picks the console font behind
Ctrl+Alt+F3 — real PSF mockups in the Style menu, then FONT= in
/etc/vconsole.conf.
Built first for accessibility — low vision, a mostly-blind bastard who still
wants a usable virtual console, HiDPI / 1440p+ glass where default8x16 is
squint-land, and reading kernel logs on Ctrl+Alt+F3 after the desktop has gone
away. Big fat Terminus clamps whip the TTY like a proper bitmap console.
GPU passthrough / vm-curator: when the card returns from a VM, fbcon often
resets to a tiny default before SDDM. systemd-vconsole-setup frequently
skips busy VTs (“All allocated virtual consoles are busy”). OmaTTY’s DRM
card* udev rule re-runs setfont from your FONT= on the active VT
(plus best-effort setfont -C on tty1–N — no chvt). That keeps SDDM’s
login VT alone so the greeter still works after a hop. Family
arm-all-family.sh installs that udev (--with-drm-reapply); family wipe /
uninstall.sh --yes remove it.
Observed on host after a few reboots and passthrough hops: every getty ends
up fat and SDDM still comes up — the active poke plus -C attempts are
enough in practice; a chvt sweep is not worth breaking the login path.
Other VTs may look small for a beat right after modeset; after settle / a
visit / the next boot they match. After a normal reboot, vconsole.conf
makes them all large from the start.
Opt-in only with the greeter stopped (nested VM / console-only tests):
omatty reapply --all-vts or OMATTY_REAPPLY_ALL=1 (refused if SDDM /
a graphical session is up). Style → TTY Fonts / plain omatty reapply stay
SDDM-safe. Brief tiny flash mid-modeset is still possible.
Pairing: OmaVT can retint the
console palette live when you hop to a TTY (kernel vt.default_* via a
limine-entry-tool drop-in — apply is a bit slow because it rebuilds Limine
entries for the next cold boot as well). Fat face here, theme colours there.
Stock Omarchy never sets a console font. Recent
archinstall builds expose a
Console font locales menu that lists every *.gz under
/usr/share/kbd/consolefonts (default default8x16, and Terminus when
terminus-font is around). Dumping that whole list into Style would be
hundreds of codepage relics and a uselessly huge carousel.
OmaTTY keeps a curated Terminus-first set, pulls terminus-font on install so
every tile is a real mockup (no “pick blind, install later” dance), and
applies with sudo the same way Style → Unlock / Boot Themes do.
These Style plugins extend Omarchy’s theme system without requiring theme
authors — or you — to ship anything extra. Fonts come from packages on the
machine (kbd, terminus-font); themes are not asked for font assets. The
broader “theme every surface that accepts colour data” story and stop-line
live in Chroma.
| Goal | What that means here |
|---|---|
| Zero extra theme assets | No per-theme font previews. Glyphs come from installed PSF files. |
| Extreme compatibility | Works beside any Omarchy theme; pairs with OmaVT for palette. |
| Closest-to-real mockups | Actual PSF bitmaps on a top-left getty session (same script as OmaVT). Still not a live /dev/tty capture. |
| Carousel-safe | Mockups are 1536×864 with ~8% side inset. Session stays top-left inside that margin; bigger faces crop mid-command like a real framebuffer. |
| Curated, not exhaustive | archinstall lists every console font; Style keeps a Terminus-first set so the picker stays usable. |
| Snappy pickers | Mockups warm in parallel across CPU cores and skip tiles whose font / layout haven’t changed — reopen is near-instant. On par with Omarchy’s stock Style carousels. |
Fonts are not theme colours — you are choosing a face/size, not syncing
colors.toml. The carousel still earns its keep the same way the theme
plugins do: mockups let you compare Terminus sizes across the curated set
faster than applying each one and hopping to Ctrl+Alt+F3. Pair with
OmaVT when you want the TTY
palette to match the desktop too.
- Style → TTY Fonts — labelled image picker (
omarchy-menu-images). - Real PSF mockups — top-left getty session painted with the font's own glyphs (not a lookalike TTF), so sizes read true before you apply.
- Cropped like a TTY, not Hyprland — fixed “glass”; bigger faces fit fewer columns/rows and crop the content. That is 1970s zoom (same framebuffer, hungrier cells), not compositor zoom that keeps layout and shrinks the viewport. Side effects on TUIs are real — fewer cells is fewer cells — and the mockup shows that on purpose (watch the passthrough path get eaten).
- Every
ter-v*weight the package ships — 12–32, normal and bold (noter-v12bupstream).terminus-fontis installed up front. - Safe
vconsole.confpatch — onlyFONT=(inside# omattymarkers).KEYMAP/ XKB stay untouched. - TTY-safe Starship — Omarchy’s desktop prompt glyphs will tofu on a
bitmap console; OmaTTY ships a parallel profile for real
/dev/tty*only.
Same getty script as OmaVT — banner,
wolf login, ~ > sudo …/single-gpu-start.sh — but every cell is a real
console glyph from the PSF you are picking. Layout from a QEMU default-TTY
capture (nested Omarchy, SDDM off → tty1; no GPU passthrough so F-keys stay
on the host). Paint stays on the stock VGA Default palette so the carousel
compares faces, not themes — OmaVT
owns colors.toml → VT colour.
Compare — real default TTY vs default8x16 mockup (same face, VGA Default):
Real getty (QEMU, stock default8x16 / tty1) |
OmaTTY mockup (default8x16) |
|---|---|
![]() |
![]() |
Hero at the top is the same session on Terminus 32 Bold — the face the carousel is selling for HiDPI glass (watch the path get eaten).
Omarchy’s starship.toml is lovely under Nerd Fonts in Alacritty / Kitty /
Ghostty. On a PSF console those same glyphs are missing codepoints — tofu
blocks instead of a prompt:
| Desktop (Omarchy default) | TTY profile |
|---|---|
❯ success / ✗ error |
> / x |
…/ truncation |
.../ |
⇡ ⇣ ⇕ git ahead/behind/diverged |
^ v <> |
Nerd icons ( ) |
! = * |
OmaTTY writes ~/.config/omarchy/omatty/starship-tty.toml and a marked block
in ~/.bashrc that sets STARSHIP_CONFIG only when tty reports
/dev/tty* (Ctrl+Alt+F3 style). Graphical terminals keep the fancy profile.
Your Wayland session is untouched; the clamp only hits the virtual console.
Installing the plugin only drops the code. Style menu rows and theme-set hooks edit your Omarchy config, so they stay opt-in.
Fast path (no prompts) — from your home folder:
~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/install.sh --yes--yes means: I consent — arm everything this plugin supports, skip Y/n. Interactive ./install.sh (no --yes) still asks — Workshop-safe; --yes / arm-all are optional shortcuts.
Style menu helper: ./tools/install-style-menu.sh --yes.
Arm the whole family in one shot (arms only what’s already installed — omit any plugin add you don’t want):
~/.config/omarchy/plugins/io.github.alxwolfenstein97.chroma/tools/arm-all-family.shFull wipe (this plugin) — same ease as install.sh --yes
(full teardown + plugin remove; ledger-only pkg drop — only packages this install
recorded pulling; pre-existing deps stay; drop may fail and the package stays if something
else still needs it — e.g. you installed Goverlay after we pulled Pillow — that’s fine):
~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/uninstall.sh --yesWipe the whole family (runs each plugin’s uninstall.sh --yes — same full
teardown as a single-plugin wipe; ledger-only pkg drops, no blanket shared-dep sweep —
drop may fail and stay if something else still requires the package):
~/.config/omarchy/plugins/io.github.alxwolfenstein97.chroma/tools/wipe-all-family.sh
# optional OCD: add --purge-tombstones (see Tombstones below)Harmless sticky note at ~/.local/state/omarchy/<plugin>/uninstalled. The next
install (quiet or loud) uses it to clear same-session /run package-prompt
stamps / shared Pillow claims, then deletes the note. Logout/reboot clears those
stamps anyway. Style stays off after wipe because armed state is gone — not
because of the stone. Normal boom-out → loud boom-in (arm-all) does not need
--purge-tombstones.
Optional OCD wipe of the notes themselves:
~/.config/omarchy/plugins/io.github.alxwolfenstein97.chroma/tools/wipe-all-family.sh --purge-tombstonesInteractive ./install.sh still asks [Y/n] if you prefer. Quiet shell restarts
only restore what you already armed. ./uninstall.sh --yes is a full wipe for
that plugin (same teardown family wipe runs); without --yes you get TTY
prompts for optional package drops.
Workshop-style one paste (enable + integrate; installer asks [Y/n]):
omarchy plugin add https://github.com/AlxWolfenstein97/omatty.git --enable
~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/install.shThat clones into ~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty and arms hooks / Style after you
confirm. Skip prompts: ~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/install.sh --yes.
Or from an existing checkout:
~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/install.sh
omarchy plugin enable io.github.alxwolfenstein97.omattybin/omatty-switcherrenders PNGs into~/.cache/omarchy/omatty/previews/, busts the image-selector thumbnail cache, then opensomarchy-menu-images.- On selection, Style launches Omarchy’s floating terminal running
omatty-set(same privilege pattern as Unlock): patches/etc/vconsole.conf, restartssystemd-vconsole-setup. Install / uninstall / arm-all / wipe use the same TTY. - Install also drops the Starship TTY profile + bashrc snippet.
CLI:
omatty list
omatty preview # warm all mockups
omatty switcher # picker → prints font id
omatty show ter-v32b # print patched vconsole.conf
omatty set ter-v32b # apply (sudo)
omatty set ter-v32b --dry-run
omatty reapply # setfont again from current FONT= (sudo; active VT)
omatty reapply --all-vts # optional chvt sweep — only with SDDM stopped
omatty clear # pin default8x16 in conf+UKI, drop starship TTY wiring (sudo)
omatty currentEncrypted installs bake FONT= into the initramfs. omatty set and omatty clear run limine-mkinitcpio afterward — leave that sudo terminal open until it finishes. Wipe/clear leaves Arch default8x16 in conf + UKI so the next boot stays stock-sized.
Want even larger glyphs on a live console without changing FONT=? setfont -d
doubles whatever face is loaded (horizontal + vertical).
Install does not force the DRM udev rule — optional for single-GPU / VFIO
hops only. Interactive install.sh asks y/N in the same TTY as Pillow/Terminus
(default No). Arm later anytime:
omatty install-drm
# or: ~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/install.sh --with-drm-reapplyomarchy plugin add https://github.com/AlxWolfenstein97/omatty.git --enable
# install.sh TTY: pillow + terminus (scanned); optional DRM y/N (default N)
# Style → TTY Fonts appears without a shell restart
# Pick ter-v32b → sudo terminal runs limine-mkinitcpio; Ctrl+Alt+F3 fat; reboot → LUKS/early TTY fat too
omatty current
omatty reapply # sudo — same helper udev uses (active VT; SDDM-safe)
# Optional VFIO path:
# omatty install-drm
# ls /etc/udev/rules.d/99-omatty-reapply.rules /usr/local/lib/omatty/reapply
# plugin add alone + reboot → quiet restores wiring only; run install.sh / arm-all for deps/hooks
# ./uninstall.sh --yes → full teardown (DRM udev, FONT= → default8x16, pkgs if unused)
# Interactive ./uninstall.sh → TTY prompts for optional pkg drop
# Pillow drop with mangohud/goverlay installed → fails Required By; that is fine| Action | What happens |
|---|---|
omarchy plugin disable … |
Shell service stops. No theme-set hook — last FONT= / DRM reapply udev stay. |
./uninstall.sh then disable / remove |
Menu, bashrc snippet, cache/state gone; OmaTTY-owned starship files removed (config dir kept if you left other files). Elevates omatty clear (pins FONT=default8x16 into conf + UKI; --yes aborts plugin remove if that fails). Live gettys may stay large until reboot. Optional ledger pkg drop. |
omarchy pkg drop python-pillow |
Optional — only if this install recorded pulling it; may fail/stay if something else still requires it. TTY y/N on uninstall. |
omarchy pkg drop terminus-font |
Optional — only if this install recorded pulling it; may fail/stay if something else still requires it. |
Quiet Service install (--quiet): restores already-armed wiring only
(DRM udev only if already passwordless). Deps + Style consent + DRM reapply come
from interactive install.sh, --yes --with-drm-reapply, or family
arm-all-family.sh. Menu + rescanPlugins so Style → TTY Fonts shows without a
manual shell restart.
Full wipe — one shot (--yes skips pkg Y/n, ledger-only drops of packages this install recorded pulling (may fail and stay if something else still needs them — e.g. Goverlay after Pillow), and removes the plugin):
~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/uninstall.sh --yesarchinstall’s Console font menu is exhaustive on purpose. For a Style carousel we only keep faces you can tell apart at a glance: the Arch default, two useful kbd fonts, and every Terminus Unicode size/weight the package ships — not a full archinstall clone, just the part that earns its keep. Mockups warm in parallel across CPU cores and skip tiles whose font / layout haven’t changed — same snappy reopen as the other Style extenders.
bash ~/.config/omarchy/plugins/io.github.alxwolfenstein97.omatty/check.sh- Layout reference:
reference-tty-default.png— QEMU getty on tty1 (SDDM off in a nested Omarchy VM). Same session script as OmaVT; this plugin paints it with real PSF glyphs on VGA Default (palette theming is OmaVT’s job). Compare mockup (same stock face):preview-default8x16.png. Hero: Terminus 32 Bold (preview.png). - Sibling Style plugins: OmaBoot, OmaVT, OmaOBS, OmaCursor, OmaHud, Chroma.
- archinstall Console font menu —
inspiration for surfacing Terminus sizes without dumping every
*.gz. - Omarchy — Style menu image picker and floating-terminal sudo pattern.
MIT — see LICENSE.


