You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Local-only, on-disk / host / process fetchers. Part of the widget catalog index in #41.
All entries here are Safety::Safe — no network, or fixed host. See AGENTS.md for the fetcher contract and shape mapping.
clock_* — local time / date / calendar derivatives
Base clock handles now-as-text (Lines), year/month/day/… rollup (Entries), and month grid (Calendar). Siblings cover the rest of the local-only temporal surface (all realtime).
clock_date — dedicated formatted-date fetcher, only if base clock + format stops being enough
clock_prayer_times — Islamic prayer times for the day, computed locally from lat / lon / date (no network — same model as clock_sunrise). Entries / Text / Badge (next prayer)
system_* — host rollup and hardware (realtime via sysinfo unless noted)
Fastfetch / neofetch parity is the rough target for this section: hardware identification (CPU / GPU / board / chassis), desktop environment (DE / WM / theme / font), audio / display / locale, plus the dynamic counterparts (usage, temperatures, throughput).
Family naming (post-#227): every system_* fetcher follows the pattern system_{info|monitor}_{subject}. info_* returns static identifiers (single Text, kind selects the field). monitor_* returns dynamic measurements (Ratio / Entries / Bars / ...). Sub-modules live under src/fetcher/system/, one file per fetcher.
system_info_machine — DMI machine identity (kind = model | vendor | serial | chassis); shipped in refactor(fetcher)!: split system into system_{info,monitor}_* family #227 (was catalog's system_host plan, renamed to avoid conflict with system_info_host). Linux-only; macOS / Windows render "n/a".
Extend system_monitor_cpu shapes: per-core load (Bars / Entries) and temperature (Ratio / Text) — still deferred. The static identification half (model / cores / frequency / vendor) now lives on system_info_cpu.
system_monitor_media — currently-playing media (Text default title - artist / Entries: player / title / artist / album / position / length); MPRIS over DBus on Linux, NowPlaying on macOS, SMTC on Windows
system_monitor_power_adapter — AC adapter wattage + state (Text + Badge: plugged / unplugged)
system_monitor_swap — swap usage as standalone Ratio / Text (because some hosts disable swap and system_monitor_memory's swap field renders a 0/0 awkwardly); complements system_info_memory kind="swap_total" (already shipped).
system_info_tty — current terminal device + parent process chain (Text)
system_info_ssh_session — SSH_CONNECTION / SSH_TTY rollup (Badge + Text); useful per-dir to flag "you're SSH'd into prod"
net_ip — local IPv4 / IPv6 addresses. Shipped in feat(fetcher): add net_* fetcher family #234. kind = primary | v4 | v6 picks the Text field; TextBlock / MarkdownTextBlock / Entries list every addressed interface; Badge flags dual-stack / IPv4 / IPv6-only. 5 shapes.
net_public_ip — public IPv4 / IPv6 via fixed resolver (Text + kind: v4 / v6); Network class but host-fixed (icanhazip.com / ipify) so Safe per the host-fixed rule
net_gateway — default-route gateway. Shipped in feat(fetcher): add net_* fetcher family #234. kind = gateway | interface — the planned metric kind was dropped, netdev doesn't expose route metric cross-platform. 5 shapes.
net_mac — link-layer addresses per interface. Shipped in feat(fetcher): add net_* fetcher family #234. Option is interface (name, default = primary) rather than kind; Badge flags universal vs locally-administered (randomized) MACs via the U/L bit. 5 shapes.
net_interfaces — every interface with state / IP / MTU / MAC. Shipped in feat(fetcher): add net_* fetcher family #234. 7 shapes; Ratio = up/total, Bars ranks interfaces by total bytes transferred, Badge is online/offline. Note: netdev::get_interfaces() leaves stats unpopulated on Linux, so the shared snapshot calls update_stats() per interface.
net_signal — Wi-Fi signal strength (Ratio + Badge: excellent / good / fair / poor)
net_vpn — VPN status (realtime; Badge + Text: provider name when resolvable)
net_speedtest — measured internet bandwidth (download / upload / latency). Shipped in feat(fetcher): add net_* fetcher family #234. Real transfer test against the fixed speed.cloudflare.com (__down / __up) — host-fixed so Safe; the download phase is time-boxed so a slow link stays bounded. 6 shapes. Replaces the planned net_speed (instantaneous throughput): a single ~500ms sample frozen for the cache TTL is noise on a one-shot splash — capacity, not flow, is the splash-appropriate "network speed".
net_speed_history — up/down throughput as a strip (NumberSeries, one series per direction)
net_ping — latency to a fixed host (Ratio + Badge; Text shape = Ns ms)
net_cert — SSL cert expiry (Network if URL is config-provided)
net_domain — whois domain expiry (Network)
net_tailscale — Tailscale node + peer status (Entries / Badge); Safe, reads local tailscaled socket
net_proxy — $*_PROXY environment. Shipped in feat(fetcher): add net_* fetcher family #234. The one realtime fetcher in the family (pure env reads); prefers lowercase var names over uppercase on Unix; Badge is proxied (Warn) / direct (Ok). 5 shapes.
net_listening_ports — open listening sockets (Entries: port → process); per-dir "what is this project serving right now". Local realtime, Safe
docker_* / k8s_* — containers
docker_containers — running containers summary
docker_image_size — top images by size
k8s_context (realtime)
k8s_pods — pod health in current namespace
docker_compose_status — services declared in the cwd's docker-compose.yml and their up/down state (per-dir; Entries / Badge)
k8s_deployments — deployment readiness in the current namespace (Entries / Bars)
Walks the gix index of the discovered repo, so untracked / .gitignore-d files are skipped automatically; vendored trees that happen to be committed (node_modules / vendor / dist / target / build / third_party) are also filtered. Distinct from project_* (which is about project-level operational state like build artefacts, dependencies, license).
code_todos — TODO / FIXME comment grep, shipped in feat(fetcher): add code_todos #114 (was project_todo_in_code; trailing : required so prose / literals don't inflate the count)
code_loc — line count: total (Text) / per-language (Entries / Bars / TextBlock / MarkdownTextBlock) / dominance (Ratio = primary language's share with denominator) / size tier (Badge — toy / small / medium / large / huge Status-mapped) / sorted-desc distribution (NumberSeries). unit = "loc" | "kloc" | "percent" (alias %) toggles count formatting; subsumes code_languages's % breakdown via unit = percent. Lockfile / framework-cache / snapshot exclusions hardened in the same PR (benefits code_todos too). Shipped in feat(fetcher): add code_loc for tracked-line counts per language #167. Two follow-ups deliberately deferred: NumberSeries from commit history (LOC trend over time, not snapshot distribution) and a metric = "files" toggle for file-count-per-language as an alternative measure — open if anyone needs them.
code_complexity — cyclomatic / cognitive complexity per file
code_files — Shipped in feat(fetcher): add code_files — top-level-dir ranking + headline file count #170. Walks the gix index via scan::for_each_tracked_path (no blob reads), counts tracked files and ranks them by top-level directory (root files grouped under (root)). 5 shapes: Text is the headline file count ("342 files"); TextBlock lists <dir> (<count>) rows; Entries exposes the same as key/value rows; Bars ranks them as bar values; MarkdownTextBlock formats them as a Markdown bullet list with emphasis on dir names. Multi-row shapes carry the per-dir ranking, not a fixed-K stat sheet — dir_count and max_depth from the original spec were dropped (Text already emits the headline file count, multi-row shapes deserve a real list). Family-wide vendored / lockfile exclusions inherited via scan helpers.
code_largest_files — Shipped in feat(fetcher): add code_largest_files for refactor-candidate hunting #171. Ranks tracked source files by line count or byte size via the shared for_each_tracked_file walker (lockfiles / vendored / binaries skipped). 7 shapes: Text headlines the single largest file ("src/render/mod.rs (1,234 LOC)"); TextBlock / MarkdownTextBlock / Entries / Bars carry the per-file ranking; NumberSeries sketches the size distribution; Badge flags refactor-candidate tier (tidy / big / bloated / monster — separate health signal from code_loc's repo-total tier). metric = "loc" | "bytes" (LOC default suits refactor hunting; bytes suits asset-weight audits). limit (default 10) caps multi-row shapes; Text always names just the core: Project scaffolding (Rust + Ratatui bootstrap) #1 file.
code_language_logo — Shipped in feat(fetcher): add code_language_logo for repo-language Devicon hero #169. Image-only fetcher: detects the dominant language across the repo's tracked files (file-count, no blob reads via the new for_each_tracked_path scan helper) and emits the matching bundled Devicon PNG. 35 languages bundled (Rust / Go / Python / Ruby / TypeScript / JavaScript / Java / Kotlin / Scala / Swift / C / C++ / C# / PHP / Elixir / Erlang / Haskell / Clojure / OCaml / Dart / Lua / R / Julia / Zig / Nim / Shell / PowerShell / HTML / CSS / Vue / Svelte / Dockerfile / Terraform / Perl / Groovy) plus a generic </> fallback. PNGs are 256×256, rasterised from upstream SVGs via rsvg-convert, ~480 KB total; both SVG sources and PNGs are committed under assets/logos/. Bundled bytes extract once into $SPLASHBOARD_HOME/cache/logos/<slug>.png so media_image (path-only) can render from a stable location. Optional language option overrides auto-detection (useful for polyglot repos and non-repo home dashboards). TextBlock shape from the original spec was dropped — Image is responsive via media_image's fit/max_width/max_height, ASCII art would be fixed-size in the same hero slot.
code_test_ratio — test-code LOC vs source LOC (heuristic test-path detection); pure structural count, no coverage report needed. Ratio / Text / Badge
project_dependencies — declared dependency count from Cargo.toml / package.json / Gemfile / pyproject.toml / go.mod. Text (total) / Entries (direct vs transitive, by ecosystem). Local-only, no registry calls.
project_scripts — runnable tasks discovered in the cwd (package.json scripts, Makefile / justfile targets, Cargo aliases, rake / composer); per-dir "what can I run here". Local, Safe. Entries / TextBlock
project_readme_excerpt — first paragraph / description from the repo README; per-dir, feeds text_markdown — "other / project" context for cloners
project_changelog_latest — latest CHANGELOG.md entry (version + date + bullets); per-dir. MarkdownTextBlock / TextBlock / Text
project_env_check — keys present in .env.example but missing from .env; onboarding sanity check. Local, Safe. Entries / Badge
project_lockfile_drift — lockfile older than its manifest (Cargo.lock vs Cargo.toml, package-lock.json vs package.json, …); "your lockfile is stale" nudge. Badge / Text
project_ci_config — which CI is wired up (.github/workflows, .gitlab-ci.yml, .circleci, …); per-dir Badge / Text
project_eol — runtime / framework / OS end-of-life dates via endoflife.date (free open API, fixed-host → Safe); auto-detects from the cwd (.nvmrc, .python-version, .ruby-version, go.mod, runtime files). "Node 18 reaches EOL in 6 weeks". Per-dir. Entries / Badge / Timeline
Standalone (local-only singletons)
ssh_agent_keys (realtime)
direnv_status — whether the cwd's .envrc is allowed / blocked / absent (realtime; Badge)
Local-only, on-disk / host / process fetchers. Part of the widget catalog index in #41.
All entries here are
Safety::Safe— no network, or fixed host. SeeAGENTS.mdfor the fetcher contract and shape mapping.clock_*— local time / date / calendar derivativesBase
clockhandles now-as-text (Lines), year/month/day/… rollup (Entries), and month grid (Calendar). Siblings cover the rest of the local-only temporal surface (all realtime).clock— shipped in feat(fetcher): real clock + multi-line static text (#7) #31 / expanded in feat(fetcher): introduce RealtimeFetcher trait for clock-like widgets #37clock_countdown— shipped in feat(fetcher): split clock into clock_* sibling fetchers #51 (targetsingle ortargetsmulti, Lines/Entries, past →"passed")clock_timezones— shipped in feat(fetcher): split clock into clock_* sibling fetchers #51 (world-clock strip, per-zone parse failures render"??")clock_sunrise— shipped in feat(fetcher): split clock into clock_* sibling fetchers #51 (NOAA approx ±1 min,lat/lonrequired, Lines/Entries)clock_state— shipped in feat(fetcher): split clock into clock_* sibling fetchers #51 (business_hours/weekend/night→ Badge)clock_ratio— shipped in feat(fetcher): split clock into clock_* sibling fetchers #51 (day / year / month / week / quarter / hour elapsed → Ratio)clock_derived— shipped in feat(fetcher): split clock into clock_* sibling fetchers #51 (kind = moon_phase | zodiac | chinese_zodiac | season | jp_season | rokuyou | iso_week | day_of_year | julian_day | unix_epoch | time_of_day);PixelArtadded in feat(clock,system): PixelArt sprites for clock_derived + system_monitor_{battery,cpu} #262 (16x16 sprites forkind = "moon_phase"(8 phases) andkind = "season"(4 sprites, hemisphere-aware); other kinds fall back to a labelled 1x1 placeholder).clock_date— dedicated formatted-date fetcher, only if baseclock+formatstops being enoughclock_prayer_times— Islamic prayer times for the day, computed locally fromlat/lon/ date (no network — same model asclock_sunrise). Entries / Text / Badge (next prayer)system_*— host rollup and hardware (realtime via sysinfo unless noted)Fastfetch / neofetch parity is the rough target for this section: hardware identification (CPU / GPU / board / chassis), desktop environment (DE / WM / theme / font), audio / display / locale, plus the dynamic counterparts (usage, temperatures, throughput).
Family naming (post-#227): every
system_*fetcher follows the patternsystem_{info|monitor}_{subject}.info_*returns static identifiers (single Text,kindselects the field).monitor_*returns dynamic measurements (Ratio / Entries / Bars / ...). Sub-modules live undersrc/fetcher/system/, one file per fetcher.Hardware ID (static,
system_info_*)system_info_host— single host identifier (kind = terminal | os | os_version | hostname | shell | arch); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (Text half of the originalsystemfetcher from feat(fetcher): cross-platform system fetchers via sysinfo #50 / feat(fetcher): add fetchers + shape extensions for 0.x presets #88).system_info_cpu— CPU identity (kind = model | cores | frequency | vendor); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (absorbscpu_*kinds from feat(fetcher): extend system kind with CPU/memory/kernel/DMI/env identifiers #225).frequencyfalls back to/proc/cpuinfoon WSL / containers; cache viaOnceLock.system_info_memory— installed memory totals (kind = total | swap_total); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (absorbsmemory_total/swap_totalkinds from feat(fetcher): extend system kind with CPU/memory/kernel/DMI/env identifiers #225).system_info_kernel— kernel identity (kind = name | version); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (was catalog'ssystem_kernelplan, single-Text subset). Entries roll-up shape (release / build / arch) still deferred.system_info_machine— DMI machine identity (kind = model | vendor | serial | chassis); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (was catalog'ssystem_hostplan, renamed to avoid conflict withsystem_info_host). Linux-only; macOS / Windows render"n/a".system_info_board— DMI motherboard (kind = vendor | model); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (was the board half of catalog'ssystem_boardplan).system_info_bios— DMI BIOS / UEFI (kind = vendor | version | date); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (was the BIOS half of catalog'ssystem_boardplan).system_info_locale— POSIX locale (single Text,LC_ALL>LC_CTYPE>LANG, fallbackC); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.system_info_timezone— IANA timezone (single Text,$TZor/etc/localtimesymlink); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.system_info_env— command preferences (kind = editor | visual | pager, basename of the env var, fallback"(unset)"); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.system_info_desktop— desktop session (kind = de | wm | init); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (was catalog'ssystem_de/system_initplans, single-Text subset). Multi-field expansions (de_version / wm_theme / init system flavour rollup) still deferred.system_info_gpu(kind = model | vendor | driver | vram_total | vram_used) deferred from feat(fetcher): extend system kind with CPU/memory/kernel/DMI/env identifiers #225. Needs NVML or a PCI ID lookup table.keymapinfo — deferred. Needs/etc/vconsole.confparsing on Linux; macOS / Windows have no equivalent file.Dynamic (
system_monitor_*)system_monitor_host— OS / host / uptime / load / cpu% / memory% rollup (Entries / TextBlock); shipped in refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227 (Entries half of the originalsystemfetcher from feat(fetcher): cross-platform system fetchers via sysinfo #50 / feat(fetcher): add fetchers + shape extensions for 0.x presets #88).system_monitor_cpu— aggregated CPU usage (Ratio / Text); shipped in feat(fetcher): cross-platform system fetchers via sysinfo #50, renamed fromcpu_loadin refactor(fetcher): rename sysinfo fetchers to prefix_suffix convention #57, renamed fromsystem_cpuin refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.PixelArt(chip silhouette + colour-shifting core) added in feat(clock,system): PixelArt sprites for clock_derived + system_monitor_{battery,cpu} #262.system_monitor_cpushapes: per-core load (Bars / Entries) and temperature (Ratio / Text) — still deferred. The static identification half (model / cores / frequency / vendor) now lives onsystem_info_cpu.system_monitor_memory— RAM utilisation (Ratio / Text / Entries); shipped in feat(fetcher): cross-platform system fetchers via sysinfo #50, renamed frommemoryin refactor(fetcher): rename sysinfo fetchers to prefix_suffix convention #57, renamed fromsystem_memoryin refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.system_monitor_memoryshapes: per-process top consumers (Entries / Bars), module type / speed (DDR4-3200, LPDDR5, …) — still deferred. Static totals (memory_total / swap_total) now onsystem_info_memory.system_monitor_uptime— shipped in feat(fetcher): cross-platform system fetchers via sysinfo #50, renamed fromuptimein refactor(fetcher): rename sysinfo fetchers to prefix_suffix convention #57, renamed fromsystem_uptimein refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.system_monitor_load— 1 / 5 / 15-minute load average (Text / Entries); shipped in feat(fetcher): cross-platform system fetchers via sysinfo #50, renamed fromload_averagein refactor(fetcher): rename sysinfo fetchers to prefix_suffix convention #57, renamed fromsystem_loadin refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227. Unix only; Windows →n/a.system_monitor_load_history— load averages as a NumberSeries strip; complementssystem_monitor_load's Text/Entries.system_monitor_processes— top 5 by CPU (Entries / TextBlock); shipped in feat(fetcher): cross-platform system fetchers via sysinfo #50, renamed fromprocess_topin refactor(fetcher): rename sysinfo fetchers to prefix_suffix convention #57, renamed fromsystem_processesin refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.system_monitor_battery— primary battery state (Ratio / Text / Entries / Badge); shipped in feat(fetcher): add system_battery realtime fetcher #123, renamed fromsystem_batteryin refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227.PixelArt(horizontal cell + inner ratio bar shifting red → green) added in feat(clock,system): PixelArt sprites for clock_derived + system_monitor_{battery,cpu} #262.system_monitor_gpu— utilization / temperature; NVIDIA via NVML, AMD via sysfs, Apple via IOKit.system_monitor_temperatures— sensors (Entries / Bars: CPU package / cores / GPU / NVMe / battery / ambient); Badge tier (cool/warm/hot/throttling).system_monitor_fans— fan RPM per sensor (Entries / Bars); Linuxhwmon, macOSIOPMService, Windows WMI.Desktop / display / audio
system_info_display— connected displays (Entries / TextBlock: name / resolution / refresh / scaling / primary); Text default = primaryWxH @ Hz; X11 / Wayland / Quartz / Win32system_monitor_brightness— display brightness (realtime; Ratio / Text); macOSIODisplayConnect, Linux/sys/class/backlight, Windows WMIsystem_info_dpi— primary display DPI / scaling factor (Text + kind:dpi/scale)system_monitor_audio— default output device + volume + mute (realtime; Text + kind:device/volume/muted); CoreAudio / PulseAudio / PipeWire / WASAPIsystem_monitor_media— currently-playing media (Text defaulttitle - artist/ Entries: player / title / artist / album / position / length); MPRIS over DBus on Linux, NowPlaying on macOS, SMTC on Windowssystem_info_desktopwithde_version/wm_version/wm_themekinds —de/wm/initare already shipped (refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227).system_info_theme— desktop theme bundle (Entries: gtk_theme / qt_theme / icons / cursor / cursor_size / font);gsettings/defaults/ registry, no subprocesssystem_info_terminal_font— terminal emulator font + size (Text); queried via terminfo / OSC where supportedsystem_monitor_terminal_size— terminal columns × rows + pixel size (realtime; Text + kind:cols/rows/pixel_width/pixel_height/wxh)system_info_terminal_theme— detected light / dark / true-color support (Text + Badge)system_info_cursor— pointer device list (Entries: name / type / dpi); separate fromsystem_info_theme(that's the cursor image theme)system_info_input— connected keyboards / mice / trackpads / gamepads (Entries / TextBlock)Software environment
system_info_packages— installed-package counts per manager (Text sum / Entries per-manager / Bars); supportsbrew,apt(dpkg),pacman,dnf/rpm,nix,flatpak,snap,cargo,npm(global),pip,gem,go,pkg(FreeBSD),port(MacPorts); parses state files only — no subprocesssystem_info_runtime— language runtime versions resolved via version managers (Entries / TextBlock); reads.tool-versions(asdf/mise),~/.nvm/alias/default,pyenv version-file,rbenv version,rustuptoolchain file — no subprocesssystem_info_localewith multi-field kinds (lc_all/lang/lc_time/lc_messages) or an Entries shape — current single-Text resolvesLC_ALL > LC_CTYPE > LANGalready shipped (refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227).system_monitor_users— currently-logged-in users (Text count / Entries: user → tty + since / TextBlock); utmp / WTMP on Unix, WTS on Windowssystem_info_who_am_i— current user identity (Text + kind:user/uid/gid/home/groups)system_info_desktop kind="init"(Entries with flavour / generation / service counts) — single-Textinitalready shipped (refactor(fetcher)!: splitsystemintosystem_{info,monitor}_*family #227, reads/proc/1/common Linux,launchd/wininiton macOS / Windows).system_monitor_services— failed / running unit count (Entries: running / failed / inactive); systemd / launchd / SC managersystem_info_security— SIP / Gatekeeper (macOS) / SELinux / AppArmor (Linux) / Defender (Windows) status (Text + Badge)system_info_secureboot— Secure Boot state (Badge:enabled/disabled/setup)system_info_tpm— TPM presence + version (Text + Badge)system_info_virtualization— detected hypervisor / container (Text + Badge:bare-metal/vm:kvm/vm:vmware/container:docker/container:wsl/container:lima)Graphics / compute capabilities
system_info_vulkan— Vulkan API version + primary device (Text + kind:api_version/device/driver); skipped if loader absentsystem_info_opengl— OpenGL version + renderer + vendor (Text + kind:version/renderer/vendor/glsl_version)system_info_opencl— OpenCL platforms + devices (Entries / TextBlock)system_info_metal— Metal feature set (macOS only; Text)system_info_directx— DirectX feature level (Windows only; Text)Connectivity (host-side, see also
net_*)system_monitor_bluetooth— paired and connected devices (Text count / Entries: device → status + battery%); BlueZ / IOBluetooth / WinRTsystem_info_camera— webcams enumerated (Entries: name / id / in-use); AVFoundation / V4L2 / DirectShowsystem_info_usb— USB devices (Entries / TextBlock: vendor / product / port); libusb / IOKitsystem_info_pci— PCI devices (Entries / TextBlock);/sys/bus/pci/ IOKit / Setup APIsystem_monitor_power_adapter— AC adapter wattage + state (Text + Badge:plugged/unplugged)system_monitor_swap— swap usage as standalone Ratio / Text (because some hosts disable swap andsystem_monitor_memory's swap field renders a 0/0 awkwardly); complementssystem_info_memory kind="swap_total"(already shipped).system_info_tty— current terminal device + parent process chain (Text)system_info_ssh_session—SSH_CONNECTION/SSH_TTYrollup (Badge + Text); useful per-dir to flag "you're SSH'd into prod"disk_*— storagedisk_usage— shipped in feat(fetcher): cross-platform system fetchers via sysinfo #50, renamed in refactor(fetcher): rename sysinfo fetchers to prefix_suffix convention #57 (wasdisk; cached, primary = largest disk,Ratio/Lines/Bars)disk_mounts— mounted volumes list (Entries / TextBlock: mount → fs / size / used%); covers fastfetch'sdiskper-mount surfacedisk_physical— physical drives (Entries: name / vendor / model / size / type=ssd/hdd/nvme); fastfetchphysicaldiskdisk_io— disk read / write throughput + IOPS (realtime; Text + kind:read/write/total/iops_read/iops_write)disk_smart— SMART health summary per disk (Text + Badge:healthy/warning/failing)disk_zpool— ZFS pool health (Text + Entries; only when zpool present)disk_raid— md / hardware RAID array state (Entries + Badge)net_*— networkingnet_ip— local IPv4 / IPv6 addresses. Shipped in feat(fetcher): add net_* fetcher family #234.kind = primary | v4 | v6picks theTextfield;TextBlock/MarkdownTextBlock/Entrieslist every addressed interface;Badgeflags dual-stack / IPv4 / IPv6-only. 5 shapes.net_public_ip— public IPv4 / IPv6 via fixed resolver (Text + kind:v4/v6); Network class but host-fixed (icanhazip.com / ipify) so Safe per the host-fixed rulenet_gateway— default-route gateway. Shipped in feat(fetcher): add net_* fetcher family #234.kind = gateway | interface— the plannedmetrickind was dropped,netdevdoesn't expose route metric cross-platform. 5 shapes.net_mac— link-layer addresses per interface. Shipped in feat(fetcher): add net_* fetcher family #234. Option isinterface(name, default = primary) rather thankind;Badgeflags universal vs locally-administered (randomized) MACs via the U/L bit. 5 shapes.net_interfaces— every interface with state / IP / MTU / MAC. Shipped in feat(fetcher): add net_* fetcher family #234. 7 shapes;Ratio= up/total,Barsranks interfaces by total bytes transferred,Badgeis online/offline. Note:netdev::get_interfaces()leavesstatsunpopulated on Linux, so the shared snapshot callsupdate_stats()per interface.net_wifi— SSID + BSSID + channel + security (Text + kind:ssid/bssid/channel/security)net_signal— Wi-Fi signal strength (Ratio + Badge:excellent/good/fair/poor)net_vpn— VPN status (realtime; Badge + Text: provider name when resolvable)net_speedtest— measured internet bandwidth (download / upload / latency). Shipped in feat(fetcher): add net_* fetcher family #234. Real transfer test against the fixedspeed.cloudflare.com(__down/__up) — host-fixed soSafe; the download phase is time-boxed so a slow link stays bounded. 6 shapes. Replaces the plannednet_speed(instantaneous throughput): a single ~500ms sample frozen for the cache TTL is noise on a one-shot splash — capacity, not flow, is the splash-appropriate "network speed".net_speed_history— up/down throughput as a strip (NumberSeries, one series per direction)net_ping— latency to a fixed host (Ratio + Badge; Text shape =Ns ms)net_dns— resolution check + configured resolvers (Text + Entries)net_cert— SSL cert expiry (Network if URL is config-provided)net_domain— whois domain expiry (Network)net_tailscale— Tailscale node + peer status (Entries / Badge); Safe, reads localtailscaledsocketnet_proxy—$*_PROXYenvironment. Shipped in feat(fetcher): add net_* fetcher family #234. The one realtime fetcher in the family (pure env reads); prefers lowercase var names over uppercase on Unix;Badgeis proxied (Warn) / direct (Ok). 5 shapes.net_listening_ports— open listening sockets (Entries: port → process); per-dir "what is this project serving right now". Local realtime, Safedocker_*/k8s_*— containersdocker_containers— running containers summarydocker_image_size— top images by sizek8s_context(realtime)k8s_pods— pod health in current namespacedocker_compose_status— services declared in the cwd'sdocker-compose.ymland their up/down state (per-dir; Entries / Badge)k8s_deployments— deployment readiness in the current namespace (Entries / Bars)code_*— code-internal metrics (greps / parses tracked source files)Walks the
gixindex of the discovered repo, so untracked /.gitignore-d files are skipped automatically; vendored trees that happen to be committed (node_modules/vendor/dist/target/build/third_party) are also filtered. Distinct fromproject_*(which is about project-level operational state like build artefacts, dependencies, license).code_todos— TODO / FIXME comment grep, shipped in feat(fetcher): add code_todos #114 (wasproject_todo_in_code; trailing:required so prose / literals don't inflate the count)code_lint— lint warning count (wasproject_linter_count)code_loc— line count: total (Text) / per-language (Entries / Bars / TextBlock / MarkdownTextBlock) / dominance (Ratio = primary language's share with denominator) / size tier (Badge —toy/small/medium/large/hugeStatus-mapped) / sorted-desc distribution (NumberSeries).unit = "loc" | "kloc" | "percent"(alias%) toggles count formatting; subsumescode_languages's % breakdown viaunit = percent. Lockfile / framework-cache / snapshot exclusions hardened in the same PR (benefitscode_todostoo). Shipped in feat(fetcher): addcode_locfor tracked-line counts per language #167. Two follow-ups deliberately deferred: NumberSeries from commit history (LOC trend over time, not snapshot distribution) and ametric = "files"toggle for file-count-per-language as an alternative measure — open if anyone needs them.code_coverage— read coverage report file (wasproject_test_coverage)code_dead— dead-code report (wasproject_dead_code_report)code_complexity— cyclomatic / cognitive complexity per filecode_files— Shipped in feat(fetcher): add code_files — top-level-dir ranking + headline file count #170. Walks the gix index viascan::for_each_tracked_path(no blob reads), counts tracked files and ranks them by top-level directory (root files grouped under(root)). 5 shapes:Textis the headline file count ("342 files");TextBlocklists<dir> (<count>)rows;Entriesexposes the same as key/value rows;Barsranks them as bar values;MarkdownTextBlockformats them as a Markdown bullet list with emphasis on dir names. Multi-row shapes carry the per-dir ranking, not a fixed-K stat sheet —dir_countandmax_depthfrom the original spec were dropped (Text already emits the headline file count, multi-row shapes deserve a real list). Family-wide vendored / lockfile exclusions inherited viascanhelpers.code_largest_files— Shipped in feat(fetcher): add code_largest_files for refactor-candidate hunting #171. Ranks tracked source files by line count or byte size via the sharedfor_each_tracked_filewalker (lockfiles / vendored / binaries skipped). 7 shapes:Textheadlines the single largest file ("src/render/mod.rs (1,234 LOC)");TextBlock/MarkdownTextBlock/Entries/Barscarry the per-file ranking;NumberSeriessketches the size distribution;Badgeflags refactor-candidate tier (tidy/big/bloated/monster— separate health signal fromcode_loc's repo-total tier).metric = "loc" | "bytes"(LOC default suits refactor hunting; bytes suits asset-weight audits).limit(default 10) caps multi-row shapes;Textalways names just the core: Project scaffolding (Rust + Ratatui bootstrap) #1 file.code_language_logo— Shipped in feat(fetcher): add code_language_logo for repo-language Devicon hero #169. Image-only fetcher: detects the dominant language across the repo's tracked files (file-count, no blob reads via the newfor_each_tracked_pathscan helper) and emits the matching bundled Devicon PNG. 35 languages bundled (Rust / Go / Python / Ruby / TypeScript / JavaScript / Java / Kotlin / Scala / Swift / C / C++ / C# / PHP / Elixir / Erlang / Haskell / Clojure / OCaml / Dart / Lua / R / Julia / Zig / Nim / Shell / PowerShell / HTML / CSS / Vue / Svelte / Dockerfile / Terraform / Perl / Groovy) plus a generic</>fallback. PNGs are 256×256, rasterised from upstream SVGs viarsvg-convert, ~480 KB total; both SVG sources and PNGs are committed underassets/logos/. Bundled bytes extract once into$SPLASHBOARD_HOME/cache/logos/<slug>.pngsomedia_image(path-only) can render from a stable location. Optionallanguageoption overrides auto-detection (useful for polyglot repos and non-repo home dashboards). TextBlock shape from the original spec was dropped — Image is responsive viamedia_image'sfit/max_width/max_height, ASCII art would be fixed-size in the same hero slot.code_test_ratio— test-code LOC vs source LOC (heuristic test-path detection); pure structural count, no coverage report needed. Ratio / Text / Badgeproject_*— project-level operational (build / config / metadata)project_bundle_sizeproject_dependency_alerts— Dependabot / Snyk (Network)project_license_checkproject_dependencies— declared dependency count fromCargo.toml/package.json/Gemfile/pyproject.toml/go.mod. Text (total) / Entries (direct vs transitive, by ecosystem). Local-only, no registry calls.project_scripts— runnable tasks discovered in the cwd (package.jsonscripts,Makefile/justfiletargets, Cargo aliases,rake/composer); per-dir "what can I run here". Local, Safe. Entries / TextBlockproject_readme_excerpt— first paragraph / description from the repo README; per-dir, feedstext_markdown— "other / project" context for clonersproject_changelog_latest— latestCHANGELOG.mdentry (version + date + bullets); per-dir. MarkdownTextBlock / TextBlock / Textproject_env_check— keys present in.env.examplebut missing from.env; onboarding sanity check. Local, Safe. Entries / Badgeproject_lockfile_drift— lockfile older than its manifest (Cargo.lockvsCargo.toml,package-lock.jsonvspackage.json, …); "your lockfile is stale" nudge. Badge / Textproject_ci_config— which CI is wired up (.github/workflows,.gitlab-ci.yml,.circleci, …); per-dir Badge / Textproject_eol— runtime / framework / OS end-of-life dates via endoflife.date (free open API, fixed-host →Safe); auto-detects from the cwd (.nvmrc,.python-version,.ruby-version,go.mod, runtime files). "Node 18 reaches EOL in 6 weeks". Per-dir. Entries / Badge / TimelineStandalone (local-only singletons)
ssh_agent_keys(realtime)direnv_status— whether the cwd's.envrcis allowed / blocked / absent (realtime; Badge)tmux_sessions— running tmux / screen / zellij sessions (realtime; Text count / Entries)