import { createHash } from 'node:crypto'; import { writeFileSync, mkdirSync } from 'node:fs'; import { join } from 'node:path'; import { execFileSync } from 'node:child_process'; // Third-party mirror, pinned to a reviewed commit; Xiaomi's font license applies. const base = 'https://raw.githubusercontent.com/boyan01/mi_sans_font/68f3ec3fee5830ce8a1d955d462fa0df401a5341/lib/fonts/'; const fonts = [ ['MiSans-Regular.ttf', '7172aa1b5c703780ee12df3fe4c50481dde01f3b125a045a398000a88d032ae5', 'Regular'], ['MiSans-Bold.ttf', '250fb5c8d4657f103e332b0b948a995e45f2c159beb8d0528424e2d32ae421be', 'Bold'], ]; const destination = '/usr/local/share/fonts/misans'; mkdirSync(destination, { recursive: true }); for (const [name, sha256] of fonts) { console.log('Downloading ' + name); const response = await fetch(base + name, { signal: AbortSignal.timeout(120000) }); if (!response.ok) throw new Error('MiSans download failed: ' + name + ' HTTP ' + response.status); const font = Buffer.from(await response.arrayBuffer()); if (createHash('sha256').update(font).digest('hex') !== sha256) { throw new Error('MiSans checksum mismatch: ' + name); } writeFileSync(join(destination, name), font, { mode: 0o644 }); } execFileSync('fc-cache', ['-f', destination], { stdio: 'inherit' }); for (const [name, , style] of fonts) { const file = execFileSync('fc-match', ['-f', '%{file}', 'MiSans:style=' + style], { encoding: 'utf8' }); if (file !== join(destination, name)) throw new Error('MiSans font lookup failed: ' + style + ': ' + file); } console.log('Installed MiSans Regular and Bold (SHA-256 verified)');