Skip to content

Theme and font

Two standalone projects, datapointchris/theme and datapointchris/font. Each is the source of truth for its own commands, catalog, data model and sync. Both reach a machine through the custom-installer path in src/dotfiles/providers/custom.py, which clones into ~/.local/share/<tool> and symlinks the entry point into ~/.local/bin.

Deployed configs point at current, never at a theme

Nothing this repo deploys names a theme or a font. Every config that gets themed reads a stable current file that the tool rewrites in place, and the same holds for fonts through fonts/current. Changing either therefore touches no file here, which is why switching theme is not a commit.

List the configs holding a pointer with rg -l --hidden '/current\b' configs/. The --hidden is load-bearing, since every one of them sits under a .config directory that rg skips by default.

Neovim is the one config that reads the tool's own state

configs/common/.config/nvim/lua/plugins/colorscheme-manager.lua loads generated colorschemes straight out of the theme tool's checkout, rather than vendoring a copy into this repo. It watches ~/.local/state/theme and switches colorscheme when theme apply runs. It also parses the tool's own history.jsonl for rejections and drops those themes from the <leader>fz picker, so a theme rejected anywhere never comes back as a suggestion here.

That coupling is deliberate but load-bearing. The theme tool owns both paths, so a change to where it writes its state breaks Neovim's switching silently — the editor simply stops following an apply.

See Also