splashboard 2.10.2

A customizable terminal splash screen with plugin-based data sources
Documentation
# home_daily — "everything at a glance" preset. Dense 2-column dashboard built from
# zero-config widgets: quote of the day at the top, then a calendar + sky panel and
# a world-clock + system panel side-by-side, with time-elapsed gauges full-width at
# the bottom. `splashboard install → home_daily` renders a filled dashboard on
# first run without any `[widget.options]` editing.
#
# For weather or sunrise/sunset you need latitude + longitude per widget; drop a
# `weather` or `clock_sunrise` block in `$HOME/.splashboard/home.dashboard.toml`
# with your own coordinates.

# ── Widgets ────────────────────────────────────────────────────────

[[widget]]
id = "quote"
fetcher = "random_quote"
render = { type = "list_plain", align = "center" }

[[widget]]
id = "hero"
fetcher = "clock"
format = "%a %e"
render = { type = "text_ascii", style = "blocks", pixel_size = "quadrant", color = "panel_title", align = "center" }

[[widget]]
id = "date"
fetcher = "clock"
format = "%A  ·  %e %B %Y  ·  day %j of %Y"
render = { type = "text_plain", align = "center" }

[[widget]]
id = "calendar"
fetcher = "clock"
render = { type = "grid_calendar", align = "center" }

# `clock_almanac` returns Entries of today's astro / calendric rollup (moon /
# season / zodiac / chinese / iso week / day of year) in a single widget so it
# can sit next to calendar in the same row-cell.
#
# Add `hemisphere = "south"` if you're below the equator so the season row
# reads Autumn in April instead of Spring.
[[widget]]
id = "almanac"
fetcher = "clock_almanac"
render = { type = "grid_table", layout = "rows", column_align = ["left", "left"] }

# World clock — UTC + five cities. Each entry is either a plain IANA zone
# (displayed verbatim) or a `{ tz, label }` pair for a short header.
[[widget]]
id = "world_clock"
fetcher = "clock_timezones"
format = "%H:%M"
render = { type = "grid_table", layout = "rows", column_align = ["left", "left"] }
  [widget.options]
  timezones = [
    "UTC",
    { tz = "America/Los_Angeles", label = "LA" },
    { tz = "America/New_York", label = "NYC" },
    { tz = "Europe/London", label = "London" },
    { tz = "Asia/Tokyo", label = "Tokyo" },
    { tz = "Australia/Sydney", label = "Sydney" },
  ]

# System — os / host / uptime / load / cpu / memory as a 6-row Entries table so
# it matches the world-clock column height.
[[widget]]
id = "system"
fetcher = "system_monitor_host"
render = { type = "grid_table", layout = "rows", column_align = ["left", "left"] }

# Gauge labels padded to 5 characters so the bars line up vertically across rows.
[[widget]]
id = "year_ratio"
fetcher = "clock_ratio"
render = { type = "gauge_line", label = "year ", value_format = "percent" }
  [widget.options]
  period = "year"

[[widget]]
id = "quarter_ratio"
fetcher = "clock_ratio"
render = { type = "gauge_line", label = "qtr  ", value_format = "percent" }
  [widget.options]
  period = "quarter"

[[widget]]
id = "month_ratio"
fetcher = "clock_ratio"
render = { type = "gauge_line", label = "month", value_format = "percent" }
  [widget.options]
  period = "month"

[[widget]]
id = "week_ratio"
fetcher = "clock_ratio"
render = { type = "gauge_line", label = "week ", value_format = "percent" }
  [widget.options]
  period = "week"

[[widget]]
id = "day_ratio"
fetcher = "clock_ratio"
render = { type = "gauge_line", label = "day  ", value_format = "percent" }
  [widget.options]
  period = "day"

# ── Layout ─────────────────────────────────────────────────────────

[[row]]
height = { length = 1 }

# Quote — two centred lines at the top. Deterministic per calendar day.
[[row]]
height = { length = 2 }
flex = "center"
  [[row.child]]
  widget = "quote"
  width = { length = 88 }

[[row]]
height = { length = 1 }

# Hero + date (full-width, no divider needed).
[[row]]
height = { length = 4 }
  [[row.child]]
  widget = "hero"

[[row]]
height = { length = 1 }
  [[row.child]]
  widget = "date"

[[row]]
height = { length = 1 }

# Row 1: calendar | sky almanac — two 34-cell columns with centred dividers.
# Row height 8 fits the calendar (1 border + month header + weekday + 5 weeks);
# almanac is 7 rows (1 border + 6 entries) and leaves one trailing blank row.
[[row]]
height = { length = 8 }
flex = "center"
gap = 2
  [[row.child]]
  widget = "calendar"
  width = { length = 34 }
  border = "top"
  title = "  this month  "
  title_align = "center"
  [[row.child]]
  widget = "almanac"
  width = { length = 34 }
  border = "top"
  title = "  sky  "
  title_align = "center"

[[row]]
height = { length = 1 }

# Row 2: world clock | system. Both panels are 6 rows of content + 1 border = 7.
[[row]]
height = { length = 7 }
flex = "center"
gap = 2
  [[row.child]]
  widget = "world_clock"
  width = { length = 34 }
  border = "top"
  title = "  world clock  "
  title_align = "center"
  [[row.child]]
  widget = "system"
  width = { length = 34 }
  border = "top"
  title = "  system  "
  title_align = "center"

[[row]]
height = { length = 1 }

# Time-elapsed gauges — full-width stack. First row carries the divider.
[[row]]
height = { length = 2 }
flex = "center"
  [[row.child]]
  widget = "year_ratio"
  width = { length = 70 }
  border = "top"
  title = "  time elapsed  "
  title_align = "center"

[[row]]
height = { length = 1 }
flex = "center"
  [[row.child]]
  widget = "quarter_ratio"
  width = { length = 70 }

[[row]]
height = { length = 1 }
flex = "center"
  [[row.child]]
  widget = "month_ratio"
  width = { length = 70 }

[[row]]
height = { length = 1 }
flex = "center"
  [[row.child]]
  widget = "week_ratio"
  width = { length = 70 }

[[row]]
height = { length = 1 }
flex = "center"
  [[row.child]]
  widget = "day_ratio"
  width = { length = 70 }

[[row]]
height = { length = 1 }