unixtime design system
theme

$ waybar-unixtime css --install

A design system that inherits its palette, not one that owns it.

Every color in this system resolves through six variables read from the active omarchy theme's colors.toml. Components never name a color. They name a role — surface, edge, dim, accent — and the theme fills it in. The five themes in the switcher above are the ones shipped in the marketing site; the system is correct only if every component below survives all five.

The type is monospace by default because the product's whole subject is aligned columns of digits. Prose headings get one display face so pages have a voice above the terminal.

SOURCE OF TRUTH

src/theme.rs

accent, foreground, background

NAMESPACE

unixtime-*

no collisions with host CSS

FALLBACK

heritage

unreadable theme still renders

color

Three values come from the theme file. Three are derived for depth. That is the entire palette — there is no secondary, no tertiary, no success-green. Semantic states borrow the accent or the dim.

Derived, not authored

surface and edge are lifts off the background; dim is the foreground pulled toward it. Any new theme only has to supply three hexes.

Alpha, not new colors

Hovers and borders use alpha(accent, .25) and alpha(fg, .15), mirroring the GTK stylesheet the binary emits. Never introduce a hex for a state.

Accent is a highlight, not a fill

Accent carries live values, active states, and one word per heading. A screen with more than ~5% accent coverage is doing it wrong.

type

Two families. Space Grotesk sets headings and page titles; JetBrains Mono does everything else, including body copy. Numeric values always carry font-variant-numeric: tabular-nums so ticking digits do not reflow.

DISPLAY — SPACE GROTESK

Epoch

Aa Bb Cc 0123456789

700 for h1 · 500 for h2/h3 · never below 0.95rem

MONO — JETBRAINS MONO

1786096903

Aa Bb Cc 0123456789

400 body · 500 labels · 700 values & the bar

TOKENSIZE USE
displayclamp 1.8→2.8 page title, one per page
epochclamp 2→3.6 the live value, accent, tabular
section1.05rem uppercase, .12em tracking, dim
body0.85–0.9rem prose, dim; max 62ch
meta0.78rem labels, hints, captions
chip0.68rem badges, eyebrow labels, .14em

space & shape

Radii come straight from the emitted GTK stylesheet: 12px for panels and menus, 8px for the items inside them. The site adds 14 for the two floating surfaces and 999 for pills.

6 · copy btn
8 · inputs, rows
10 · the bar
12 · cards, code
14 · floating
999 · pills

SPACING

6 · inline gaps
10 · chip clusters
14 · grid gutters
20 · card padding
28 · heading→content
56 · section rhythm

ELEVATION

flat — border only. Cards, code, rows.
float — 0 12px 40px rgb(0 0 0 / .35). Panels, modals, the epoch card.
detached — accent border at 50%. GTK menus and tooltips, which cannot cast shadows.

badges

The format chips in formats.rs were bright generic hexes that fought every theme. Retuned, they hold one lightness and one chroma and vary only in hue — so they read as a family, sit behind the accent, and stay legible on any background. The formula is oklch(0.52 0.085 H) with white text; the neutral drops chroma to 0.02.

Chips are identity, never status. A chip never means good or bad — it names which family a value belongs to. Status uses accent for active, dim for inert.

buttons

Four kinds, and the ordering matters: solid accent is reserved for the one irreversible action on a screen. Most of this product's buttons are ghosts, because most of its actions are copies.

SOLID one per screen
GHOST the default
PILL mutually exclusive sets
MICRO lives inside code blocks; confirms in place with "ok" for 1200ms, never a toast

forms

Inputs sit on the page background, not the surface, so a field always reads as a hole cut into its card. Labels are meta-sized and dim above; result and helper text sit below, accent for output and dim for hints. Validation is inline text — there is no red.

2026-08-07 10:01:43 UTC

seconds or milliseconds — auto-detected

focused · border becomes accent, no glow

↳ trailing %% is not a directive

bar behaviour

precision

data display

The format panel is the system's signature component: label left, value right, chip in front, a 2px accent rule on hover, and a copy that confirms by turning the value accent for 900ms. Tables are the same row, given a header.

FORMAT PANEL

TABLE

VALUE FORMATAGE
1786096903seconds 4s
2026-08-07T10:01:43Z iso-utc2m
20260807-1001picker 1h
1786010503000millis 1d

THE BAR MODULE

123 wifi62% · 10:01

12px horizontal padding, monospace, foreground for seconds and accent for every higher precision — the class name carries the color.

EMPTY STATE

(empty)

Nothing copied yet. Click any format to start a history.

overlays

Everything that floats gets radius 14, the float shadow, and — where it detaches from the page entirely, as GTK menus and tooltips do — a 50% accent border instead. Toasts are for background work only; a copy confirms in place.

MODAL

TOAST

unixtime.css installed dismiss
no dmenu launcher found dismiss

TOOLTIP / GTK MENU

Menu items get radius 8 and a 25% accent hover fill; separators are the foreground at 15%. These values ship verbatim in theme.rs.

code

Two colors only: dim for comments, accent for the command being run. Everything else is foreground. No syntax theme, no language keywords, no line numbers.

# generate + install for the active
theme
waybar-unixtime css --install
/* generated: unixtime.css */
@define-color unixtime-accent #c9a554;
@define-color unixtime-fg     #c2c2b0;
@define-color unixtime-bg     #16161c;

motion

One thing on screen is allowed to move on its own: the cursor. Everything else moves only in response to a pointer, and briefly.

CURSOR — 1.2s steps(1)

1786096903

Stepped, never eased — it is a terminal caret, not a pulse.

HOVER — 150ms

border-color and a 1px lift. Never scale, never shadow-on-hover.

CONFIRM — 900/1200ms

1786096903

Copy flips the value to accent for 900ms; a button swaps its label to "ok" for 1200ms. Then it reverts silently.

THEME — 400ms

background and color cross-fade over 400ms so an omarchy switch reads as a repaint, not a reload. Borders and text snap.

voice

The copy in this repo reads like a person who uses the thing wrote it. Keep that.

DO

Section headings lowercase, prefixed ## — the page is a README.

Lead a feature with the noun: "dropdown of every format".

Say what it does, then what it costs. "Rust, MIT licensed, no runtime deps."

Name real commands and real paths in body copy.

DON'T

No exclamation marks outside "copied!".

No "seamlessly", "powerful", "effortless".

No emoji — the only glyphs are ✓ ⇄ ⟲ · ── and they carry meaning.

No title case, anywhere, including buttons.