Files
Voiced/src/hooks/useUserFonts.ts
T
xavierk afbc0aa56f Add font import for Now, Gotham and Open Sauce One overrides; package fonts for Void
Font import:
- Migration M6 adds user_fonts; files are stored content-addressed under
  the local data dir. New Rust commands inspect, import, list, read and
  remove fonts, refusing WOFF2, collections, variable fonts and
  restricted fsType, and unpacking WOFF1 to plain sfnt.
- Imported fonts register in the render worker as user:<Face> families
  with an italic alias, and are pinned in the frozen render prefs so
  issued invoices can still re-render. Fonts referenced by issued
  invoices are hidden, never deleted.
- Size and tracking compensations tuned for the substitutes apply only
  while the face is not overridden; default output and fingerprint
  goldens are unchanged.
- Settings gets a Fonts section with a licence acknowledgement.

Void packaging:
- Install fonts to /usr/share/fonts/voiced with per-family OFL licences,
  set font_dirs, and add INSTALL/REMOVE scripts that run fc-cache.
  xbps-create carries both scripts (verified in a void-glibc container).
- Fix xbps-create dependency specs in build-xbps.sh.
2026-10-04 13:58:06 +05:30

24 lines
741 B
TypeScript

import { useEffect, useState } from "react";
import { api } from "../lib/api";
import { onUserFontsChanged, type UserFontRow } from "../lib/fontImport";
/** The visible user-imported fonts; reloads when the Settings font table changes them. Empty while loading or on error. */
export function useUserFonts(): UserFontRow[] {
const [fonts, setFonts] = useState<UserFontRow[]>([]);
useEffect(() => {
let active = true;
const load = () =>
api
.listUserFonts()
.then((rows) => active && setFonts(rows))
.catch(() => active && setFonts([]));
void load();
const off = onUserFontsChanged(() => void load());
return () => {
active = false;
off();
};
}, []);
return fonts;
}