Skip to content

feat: Add Extension Manager and Plugin Architecture#979

Open
itzsleepyy wants to merge 35 commits intoTheBoredTeam:devfrom
itzsleepyy:feature/extension-manager2
Open

feat: Add Extension Manager and Plugin Architecture#979
itzsleepyy wants to merge 35 commits intoTheBoredTeam:devfrom
itzsleepyy:feature/extension-manager2

Conversation

@itzsleepyy
Copy link

Summary

Messed the first PR - lol here it is again. (0 Clue why there are some really old commits in here when they contribute nothing lol)

Introduces a new extension/plugin management system that lays the foundation for modular feature control. Existing built-in features (Media, Calendar, Battery, HUD, Shelf, Camera Mirror) are now registered as first-party extensions with unified enable/disable controls.

Changes

New Files

  • ExtensionDescriptor.swift - Core model for extension metadata and state bindings
  • ExtensionRegistry.swift - Central registry of all built-in extensions
  • ExtensionManager.swift - Observable state manager for extension lifecycle
  • ExtensionsHubView.swift - New settings UI for managing extensions
  • ExtensionCard.swift - Reusable card component with toggle/settings/delete actions

Modified Files

  • SettingsView.swift - Added MirrorSettings view for Camera Mirror extension
  • Constants.swift - Added extension-related Defaults keys

Built-in Extensions

Extension Description Settings
Media Music controls, live activity, visualizer
Calendar Events and reminders display
Battery Power status and percentage
HUD Volume/brightness replacement
Shelf Drag-and-drop temporary files
Camera Mirror Webcam preview in notch

Screenshots

Screen.Recording.2026-01-14.at.23.31.03.mp4

Testing

  • All 6 extensions appear in Extensions Hub
  • Toggle switches enable/disable features correctly
  • Settings buttons navigate to feature configuration
  • UI matches existing app design language

Related

This PR focuses on frontend architecture only - no backend/marketplace integration yet. Future PRs will add:

  • Extension points (hooks for third-party extensions)
  • Marketplace backend
  • Dynamic extension loading

itzsleepyy and others added 30 commits September 22, 2025 23:44
CLIPBOARD - Happyish

- Added NotchNotesView for displaying and editing notes with a sidebar for note selection.
- Introduced NotesManager to handle note creation, deletion, and persistence.
- Created NotesSettings for configuring notes-related preferences.
- Developed ClipboardManager for managing clipboard history, including item capture and storage.
- Implemented ClipboardItem model to represent clipboard data with various types.
- Added Note model to represent individual notes with properties for content, timestamps, and formatting options.
- Enhanced user experience with search functionality and note preview features.
- Integrated settings for clipboard retention and auto-save intervals for notes.
* Update update-version-dropdown.yml

* Update update-version-dropdown.yml

* Update update-version-dropdown.yml

* chore(): update Bug Report

* Add localization badge to README

* Update README.md

* Add new release information for v2.7 – Flying Rabbit RC 3 in appcast.xml, including features, fixes, and contributor acknowledgments.

* Update app cast

* Add GitHub Actions workflow for boringNotch build

This workflow automates the build and deployment process for the boringNotch application, handling preparation, building, and ending stages based on issue comments.

* Update build number generation

* Update permissions

* remove deployment from release action

* update release.yml

* Fix missing brack in release.yml

* Add ability to read member info to GitHub Action

* Use repo rite permission check rather than org permission check

* Update release.yml export

* Add development team to release.yml

* Update signing in release.yml

* update release.yml

* update release.yml

* update release.yml

* update release.yml

* update release.yml

* update release.yml

* update release.yml

* update release.yml and add generate_appcast

* update artifact upload in release.yml

* update artifact upload and download

* cleanup release.yml

* reduce private key handling complexity

* update release.yml

* update release.yml

* move script to correct folder

* update release.yml

* update script fetching

* feat: Add Notes and Clipboard management features

- Implement NotchNotesView for creating and editing notes.
- Create NotesSettings and ClipboardSettings views for user preferences.
- Update SettingsView to include navigation to Notes and Clipboard settings.
- Add TabSelectionView entries for Notes and Clipboard tabs.
- Introduce NotesManager for handling note creation, deletion, and persistence.
- Implement ClipboardManager for managing clipboard history and items.
- Define ClipboardItem and Note models for structured data handling.
- Add necessary constants for notes and clipboard settings.
- Create SQLite-backed storage for clipboard items.

* Enhances note editing and sidebar UI - working, stable.

Improves the note editing experience within the notch by introducing several key enhancements:

- Adds an empty state placeholder in the editor.
- Implements keyboard focus management for the note editor.
- Enhances the sidebar UI with a cleaner design and improved note list.
- Introduces more visual feedback on interaction.

* Improves Notes feature and settings integration

Refactors the Notes view, settings, and tab integration.

- Enhances the Notes view with editor improvements and sidebar refinements.
- Integrates Notes settings into Defaults, providing toggles for enablement, monospace font, and auto-save timing.
- Dynamically hides the Notes tab based on user preferences.
- Improves tab selection and sanitizes the selection based on feature availability.

* Improves clipboard exclusion settings UI

Refactors the clipboard exclusion settings UI to be more user-friendly.

Replaces the text editor with a visual list of excluded apps, allowing users to add apps via an application picker and remove them individually.

Updates the UI to display a placeholder when no apps are excluded.

Reduces the maximum number of clipboard items that can be stored.

* Deleted file, as can just put changes in pr description lol

---------

Co-authored-by: Alexander <33609792+Alexander5015@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: theboringhumane <me@iamharsh.dev>
Updated the bug report form to improve clarity and added options for music source.
Updated labels and validations for music-related fields in the bug report form.
Removed 'Select a version' option from music source selection.
…on-hyperlink-correction

Icon hyperlink correction in README.md
This document outlines the guidelines for contributing to the project, including how to report bugs, submit feature requests, and create pull requests.
Updated contributing guidelines to refer to CONTRIBUTING.md and removed detailed steps.
Updated contribution guidelines for clarity and engagement.
- **Settings Refactor**: Consolidate Media, Calendar, Battery, HUD, and Shelf settings into a single "Extensions" hub for better discoverability.
- **New UI**: Add `ExtensionsHubView` and `ExtensionCard` with support for verified badges, search, and toggle/install actions.
- **Architecture**: Introduce `ExtensionManager` and `ExtensionRegistry` to handle extension state, migration, and configuration.
- **Empty State**: Implement `EmptyNotchView` featuring a looping "Hello" glowing animation when all extensions are disabled.
- **Bug Fix**: Update `NotchHomeView` to correctly hide the Music Player when the Media extension is disabled.
- **UX**: Add "Enable some extensions" prompt to the empty state to encourage user engagement.
This commit implements a unified Extensions Hub and fixes critical bugs where
disabling the Shelf extension didn't fully disable the feature.

## Extensions Hub Implementation
- Add unified Extensions Hub UI to consolidate all extension management
- Create ExtensionManager and ExtensionRegistry for state management
- Implement ExtensionCard with verified badges for built-in extensions
- Add search and filter functionality to ExtensionsHubView
- Migrate existing enabled features to new extension system on first launch
- Update SettingsView to use Extensions tab instead of individual tool tabs

## Empty Notch State
- Implement EmptyNotchView with HelloAnimation when all extensions disabled
- Add "So boring..." and "Enable some extensions" prompts
- Fix NotchHomeView to respect musicLiveActivityEnabled setting

## Shelf Extension Disable Bug Fixes
- Fix DragDetector in boringNotchApp.swift to check Shelf enabled state
- Add Shelf check to drop targeting handler in ContentView.swift
- Prevent auto-opening to Shelf in BoringViewModel.close() when disabled
- Implement tab filtering in TabSelectionView (Home always visible, Shelf conditional)
- Update BoringHeader to always show tabs, preventing users from getting locked

Files modified:
- boringNotch/components/Settings/SettingsView.swift
- boringNotch/components/Settings/ExtensionsHubView.swift (new)
- boringNotch/components/Settings/ExtensionCard.swift (new)
- boringNotch/components/Notch/EmptyNotchView.swift (new)
- boringNotch/components/Notch/NotchHomeView.swift
- boringNotch/components/Notch/BoringHeader.swift
- boringNotch/components/Tabs/TabSelectionView.swift
- boringNotch/models/ExtensionDescriptor.swift (new)
- boringNotch/managers/ExtensionManager.swift (new)
- boringNotch/managers/ExtensionRegistry.swift (new)
- boringNotch/models/BoringViewModel.swift
- boringNotch/boringNotchApp.swift
- boringNotch/ContentView.swift
Major refactor of the Extensions system to add a community marketplace
and improve navigation patterns throughout the extensions interface.

## Navigation Improvements
- Replace sheet-based navigation with NavigationStack for in-place content
  replacement (eliminates stacked modal windows)
- Implement push/pop navigation: Hub → Marketplace → Detail
- Add ExtensionDestination enum for type-safe routing
- Make ExtensionDescriptor Hashable to support navigation

## Marketplace Implementation
- Search-First layout with prominent search bar (16px internal padding)
- Filter tabs: Popular, New, Featured (pill-style design)
- Single-column grid layout for better readability
- Improved spacing: 24-32px margins, 20px between sections
- Cards show icon, name, developer, and description snippet

## Extension Detail View
- Comprehensive detail page with sections for:
  - Hero section with large icon and developer info
  - Screenshot gallery (horizontal scroll, placeholders ready)
  - Categories/tags (pill-style badges)
  - Metadata card (version, dates, size)
  - Full description with proper line spacing
- Orange "Download" CTA button
- Auto-navigate back to marketplace after download

## Extensions Hub Simplification
- Merge "Available" and "Installed" lists into single "Installed" view
- All downloaded extensions appear as installed (toggle on/off)
- Add enabledExtensions Defaults key for tracking downloaded extension state
- Update ExtensionManager lifecycle: Remote → Downloaded (Installed)

## Bug Fixes
- Fix Shelf disable bug: Add guard checks in handleDragEntersNotchRegion
- Fix close() method to respect Shelf enabled state
- Prevent drag-to-shelf when extension is disabled

Files modified:
- boringNotch/components/Settings/ExtensionsHubView.swift (complete rewrite)
- boringNotch/components/Settings/ExtensionCard.swift
- boringNotch/managers/ExtensionManager.swift
- boringNotch/models/ExtensionDescriptor.swift
- boringNotch/models/Constants.swift
- boringNotch/boringNotchApp.swift
- boringNotch/models/BoringViewModel.swift
- boringNotch/components/Tabs/TabSelectionView.swift
- boringNotch/components/Notch/BoringHeader.swift
- boringNotch/ContentView.swift
Replace hardcoded colors with Color.effectiveAccent to respect app's
custom accent color settings throughout the extensions interface and
settings sidebar.

## Changes

### Extension Views (ExtensionsHubView.swift)
- Replace all Color.accentColor with Color.effectiveAccent
- Update marketplace filter tabs selection background
- Update extension icon backgrounds (gradient)
- Update category label backgrounds and text colors
- Remove hardcoded .tint(.orange) from Download button

### Extension Cards (ExtensionCard.swift)
- Add .tint(Color.effectiveAccent) to Toggle switches
- Ensures on/off state uses custom accent color

### Settings Sidebar (SettingsView.swift)
- Replace List-based sidebar with custom VStack implementation
- Create new SidebarItem component with manual selection rendering
- Selection background: Color.effectiveAccent.opacity(0.15)
- Selected icon color: Color.effectiveAccent
- Fixes macOS limitation where List selection ignores custom tint

## Technical Details

The app uses Color+AccentColor.swift extension which provides:
- Color.effectiveAccent: Returns custom
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.

3 participants