forked from genewildish/Mainline
79 lines
3.2 KiB
Python
79 lines
3.2 KiB
Python
"""
|
||
Configuration constants, CLI flags, and glyph tables.
|
||
"""
|
||
|
||
import sys
|
||
|
||
from pathlib import Path
|
||
|
||
|
||
def _arg_value(flag):
|
||
"""Get value following a CLI flag, if present."""
|
||
if flag not in sys.argv:
|
||
return None
|
||
i = sys.argv.index(flag)
|
||
return sys.argv[i + 1] if i + 1 < len(sys.argv) else None
|
||
|
||
|
||
def _arg_int(flag, default):
|
||
"""Get int CLI argument with safe fallback."""
|
||
raw = _arg_value(flag)
|
||
if raw is None:
|
||
return default
|
||
try:
|
||
return int(raw)
|
||
except ValueError:
|
||
return default
|
||
|
||
|
||
def _resolve_font_path(raw_path):
|
||
"""Resolve font path; relative paths are anchored to repo root."""
|
||
p = Path(raw_path).expanduser()
|
||
if p.is_absolute():
|
||
return str(p)
|
||
repo_root = Path(__file__).resolve().parent.parent
|
||
return str((repo_root / p).resolve())
|
||
# ─── RUNTIME ──────────────────────────────────────────────
|
||
HEADLINE_LIMIT = 1000
|
||
FEED_TIMEOUT = 10
|
||
MIC_THRESHOLD_DB = 50 # dB above which glitches intensify
|
||
MODE = 'poetry' if '--poetry' in sys.argv or '-p' in sys.argv else 'news'
|
||
FIREHOSE = '--firehose' in sys.argv
|
||
|
||
# ─── NTFY MESSAGE QUEUE ──────────────────────────────────
|
||
NTFY_TOPIC = "https://ntfy.sh/klubhaus_terminal_mainline/json?since=20s&poll=1"
|
||
NTFY_POLL_INTERVAL = 15 # seconds between polls
|
||
MESSAGE_DISPLAY_SECS = 30 # how long a message holds the screen
|
||
|
||
# ─── FONT RENDERING ──────────────────────────────────────
|
||
FONT_PATH = _resolve_font_path(
|
||
_arg_value('--font-file')
|
||
or "/Users/genejohnson/Documents/CS Bishop Drawn/CSBishopDrawn-Italic.otf"
|
||
)
|
||
FONT_INDEX = max(0, _arg_int('--font-index', 0))
|
||
FONT_PICKER = '--no-font-picker' not in sys.argv
|
||
FONT_SZ = 60
|
||
RENDER_H = 8 # terminal rows per rendered text line
|
||
|
||
# ─── FONT RENDERING (ADVANCED) ────────────────────────────
|
||
SSAA = 4 # super-sampling factor: render at SSAA× then downsample
|
||
|
||
# ─── SCROLL / FRAME ──────────────────────────────────────
|
||
SCROLL_DUR = 5.625 # seconds per headline (2/3 original speed)
|
||
FRAME_DT = 0.05 # 50ms base frame rate (20 FPS)
|
||
FIREHOSE_H = 12 # firehose zone height (terminal rows)
|
||
GRAD_SPEED = 0.08 # gradient traversal speed (cycles/sec, ~12s full sweep)
|
||
|
||
# ─── GLYPHS ───────────────────────────────────────────────
|
||
GLITCH = "░▒▓█▌▐╌╍╎╏┃┆┇┊┋"
|
||
KATA = "ハミヒーウシナモニサワツオリアホテマケメエカキムユラセネスタヌヘ"
|
||
|
||
|
||
def set_font_selection(font_path=None, font_index=None):
|
||
"""Set runtime primary font selection."""
|
||
global FONT_PATH, FONT_INDEX
|
||
if font_path is not None:
|
||
FONT_PATH = _resolve_font_path(font_path)
|
||
if font_index is not None:
|
||
FONT_INDEX = max(0, int(font_index))
|