Skip to content

feat: rebuild Preferences, typography and sidebar navigation on the shared colony-ui kit - #95

Merged
MotherSphere merged 5 commits into
mainfrom
feat/colony-ui-design-system
Oct 12, 2026
Merged

MotherSphere merged 5 commits into
mainfrom
feat/colony-ui-design-system

Conversation

@MotherSphere

Copy link
Copy Markdown
Member

Why

Colony's Preferences page, fonts, text sizing and sidebar were the hand-written originals that colony-ui 0.1.6 now ships as a shared kit. Keeping both meant two copies drifting apart, and a few defects only Colony's copy had.

Changes

Preferences

  • colony-ui 0.1.6 (iced stays at 0.14.0). The ten Appearance and Accessibility preferences are its StandardPreferences, flattened into preferences.json under the field names the file already used, applied at boot and changed through a single Preference(Change) message.
  • A file written by 0.10.4 or earlier stored "selected_accent": "blue" for everyone who never picked an accent, and applied it over the theme's own. It becomes the theme's own accent, once: a new prefs_version field keeps a blue picked later. Values this build does not understand fall back to their defaults and the rest of the file is kept.
  • The page is built from the kit: General, Appearance, Accessibility, then Storage, Shortcuts and About last. Appearance and Accessibility come from PreferencesView, with Colony's keyboard navigation between Motion and Reading. Colony's own sections use the kit's collapsible sections, rows, dropdowns and toggles, and fold again when the page closes. The hand-written theme picker, the accent hex table and the white check marks are gone.
  • Locale keys the kit provides are removed from en.rs and fr.rs.

Typography, motion, navigation

  • The fonts ship inside colony-ui: src/ui/assets/fonts/ is removed and the README links the licences in colony-ui.
  • Every text size goes through colony-ui's sz(), every font through its accessors (no synthesized weights). Nerd Font glyphs are drawn in the Nerd Font, apart from their labels, so they survive the dyslexia font. Markdown table headers, cells and badges follow the text scale; badge text is contrast_on the badge colour.
  • Every animation is gated on effects_enabled().
  • The sidebar uses identity_button, nav_label, nav_item styling and nav_hint: selection by accent background with contrast_on text. Its width, like the category list's, grows with the text scale.
  • categories.json writes its glyphs as \uXXXX escapes, with a test. Light/Dark comes from the palette's own lightness rather than a local luma formula.

French interface

  • The English words left in French (Rescan, Scan, License, Changelog and others) are translated, and descriptions that promised settings Colony does not have (time format, update channel, scan directories, private repository access) are corrected in both locales.
  • The 21 merged PRs whose descriptions were in French now read in English.

Layout

  • validate-manifest moves to manifest.rs (output and exit codes unchanged, now under test) and the logging setup to logging.rs. main.rs keeps argument dispatch and the launch.
  • download.rs (2068 lines) becomes download/ with http.rs, files.rs, verify.rs, install.rs and launcher.rs, a pure move with the tests next to their code.
  • The shields.io colour names move to config/shields-colors.json; a colour string with a multi-byte character no longer panics the parser.
  • docs/architecture.md, docs/tutorial.md, docs/faq.md, CONTRIBUTING.md and docs/release-signing.md follow.

Testing

  • cargo test --bin colony: 164 passed locally, including the new 0.10.4 preferences fixture, the accent migration, the category order, key parity, escaped glyphs, shields colours and validate-manifest exit codes.
  • CI covers Windows, macOS, clippy and the MSRV.

…y-ui 0.1.6

Preferences are colony-ui's StandardPreferences, flattened into
preferences.json under the field names it already had, applied at boot and
changed through one Preference(Change) message. A file from 0.10.4 or older
loses the accent it was given by default (blue), once, and keeps everything
else; a prefs_version field remembers that the migration ran.

The Preferences page is the kit's: General, Appearance, Accessibility, then
Storage, Shortcuts and About. Appearance and Accessibility come from
PreferencesView, with Colony's keyboard navigation between Motion and Reading.

Fonts, text sizes and motion come from colony-ui: the bundled font files are
gone, glyphs are drawn in the Nerd Font whatever the dyslexia setting, and
every animation is gated on effects_enabled(). The sidebar is built from
identity_button, nav_label, nav_item and nav_hint, selected by background,
and grows with the text scale.

Also: escaped glyphs in categories.json, Light/Dark from the palette's
own lightness, badge text legible on light badges, the shields colour names
in config/, and the English words and false claims left in the French
interface.
validate-manifest's checks move to manifest.rs and the logging setup to
logging.rs, unchanged. main.rs keeps the argument dispatch, the startup
order and the iced launch. The exit codes every org release reads are now
under test.
A glyph inside a label's string was drawn in the interface font, which is
OpenDyslexic while the dyslexia font is on, and OpenDyslexic has none of
them. Buttons now set the glyph and the label as two texts, and the two
locale strings that carried a glyph no longer do.
HTTP streaming, file safety and archive extraction, digest and metadata
verification, app install and launcher self-update each get a file, with
their tests. A pure move: every item keeps its body and its doc comment,
and download/mod.rs re-exports the same API. The architecture map, the
contributor guide and release-signing.md point at the new paths.
@MotherSphere
MotherSphere merged commit e4876e6 into main Oct 12, 2026
5 checks passed
@MotherSphere
MotherSphere deleted the feat/colony-ui-design-system branch October 12, 2026 11:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant