feat: Add Extension Manager and Plugin Architecture#979
Open
itzsleepyy wants to merge 35 commits intoTheBoredTeam:devfrom
Open
feat: Add Extension Manager and Plugin Architecture#979itzsleepyy wants to merge 35 commits intoTheBoredTeam:devfrom
itzsleepyy wants to merge 35 commits intoTheBoredTeam:devfrom
Conversation
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.
This reverts commit 951e5c3.
* 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>
This reverts commit 79c7e35.
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
…s by updating names, descriptions, and developer information.
…d mark its localization as stale.
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 bindingsExtensionRegistry.swift- Central registry of all built-in extensionsExtensionManager.swift- Observable state manager for extension lifecycleExtensionsHubView.swift- New settings UI for managing extensionsExtensionCard.swift- Reusable card component with toggle/settings/delete actionsModified Files
SettingsView.swift- AddedMirrorSettingsview for Camera Mirror extensionConstants.swift- Added extension-related Defaults keysBuilt-in Extensions
Screenshots
Screen.Recording.2026-01-14.at.23.31.03.mp4
Testing
Related
This PR focuses on frontend architecture only - no backend/marketplace integration yet. Future PRs will add: