Skip to content

feat(ui): add sidebar appearance settings#13

Closed
noodanee wants to merge 1 commit intovaayne:mainfrom
noodanee:feat/sidebar-appearance-settings
Closed

feat(ui): add sidebar appearance settings#13
noodanee wants to merge 1 commit intovaayne:mainfrom
noodanee:feat/sidebar-appearance-settings

Conversation

@noodanee
Copy link

Summary

  • Add configurable sidebar font family, font size (10-22pt), and spacing (0.8x-1.8x)
  • New "Appearance" category in Settings with live preview
  • Default font size bumped from 13pt to 14pt for better readability

Changes

New: SidebarAppearance model (MoriCore)

  • fontFamily, fontSize, spacing properties
  • FontStyle enum with relative size calculations from base fontSize
  • SwiftUI EnvironmentKey for propagation through view hierarchy
  • SidebarAppearanceStore with @Observable + UserDefaults persistence

Settings UI (GhosttySettingsView)

  • New .appearance category (first in sidebar list)
  • Font picker with search, size slider, spacing slider
  • Live sidebar preview reflecting current settings

Sidebar views updated

  • WorktreeSidebarView, WorktreeRowView, WindowRowView, ProjectRailView
  • Read SidebarAppearance from @Environment(\.sidebarAppearance)
  • Dynamic fonts via appearance.font(.style), scaled spacing via appearance.scaled()

Wiring (AppDelegate + HostingControllers)

  • SidebarAppearanceStore created in AppDelegate, passed to sidebar and settings
  • SidebarContentView injects appearance into environment

Test plan

  • Open Settings → Appearance, change font family — sidebar updates immediately
  • Adjust font size slider — all sidebar text scales proportionally
  • Adjust spacing slider — padding and gaps scale
  • Quit and relaunch — settings are preserved
  • Default appearance (fresh install) looks good without configuration

Add user-configurable sidebar appearance with font family, font size,
and spacing controls. Settings persist via UserDefaults and take effect
immediately across all sidebar views.

- New SidebarAppearance model with Environment-based propagation
- SidebarAppearanceStore (@observable) with UserDefaults persistence
- "Appearance" category in Settings UI with font picker, size slider
  (10-22pt), spacing slider (0.8x-1.8x), and live preview
- All sidebar views (WorktreeSidebar, WorktreeRow, WindowRow,
  ProjectRail) read appearance from @Environment
- Default font size bumped from 13pt to 14pt for better readability
@vaayne
Copy link
Owner

vaayne commented Mar 22, 2026

@noodanee Can you resolve all conflicts?

@noodanee
Copy link
Author

Closing — will resubmit based on latest main with i18n and TaskSidebarView coverage.

@noodanee noodanee closed this Mar 22, 2026
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.

2 participants