Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
8395548
Add notification live activity to the notch
theboringhumane Aug 12, 2026
37d89d2
Sanitize stale nonNotchHeightMode value at startup
theboringhumane Aug 12, 2026
e887903
Add Claude desktop to notification live activity
theboringhumane Aug 12, 2026
6c4c8fe
Prefer the real "Reply" action when a banner exposes it
theboringhumane Aug 12, 2026
2b654d8
Fix WhatsApp notifications being silently dropped
theboringhumane Aug 12, 2026
e7f2b80
Fix silent XPC callback drop and add banner diagnostics
theboringhumane Aug 12, 2026
54ba242
Fix watcher never scanning after startup in the XPC service
theboringhumane Aug 12, 2026
f2594cf
Keep the XPC connection alive so banner pushes reach the app
theboringhumane Aug 12, 2026
c01ee96
Stop stale notifications hijacking the opened notch
theboringhumane Aug 12, 2026
d55dcad
Don't let a notification expire while you're opening the notch
theboringhumane Aug 12, 2026
1d70959
Make the expanded notification compact
theboringhumane Aug 12, 2026
5f48817
Fit the notch to the notification instead of full width
theboringhumane Aug 12, 2026
414cfbd
Pin close button to top-right, let reply field fill its width
theboringhumane Aug 12, 2026
16dbfbb
Fix notch top-alignment and tighten notification layout
theboringhumane Aug 12, 2026
7467fcc
Fix reply field never receiving keystrokes; pause dismiss while typing
theboringhumane Aug 12, 2026
63ca340
Add Apple Intelligence smart-reply suggestions
theboringhumane Aug 12, 2026
c3a7d00
Fix reply typing for real: BoringNotchWindow is dead code
theboringhumane Aug 12, 2026
1a69082
Keep notch open while composing; drop broken stack-depth cue
theboringhumane Aug 12, 2026
f993f94
Make the send button actually respond to clicks
theboringhumane Aug 12, 2026
a7d713a
Fix duplicate reply suggestions colliding as ForEach ids
theboringhumane Aug 12, 2026
1fbd47c
Stop releasing key status on every focus flip
theboringhumane Aug 12, 2026
f8a3cf1
Hold notifications until the notch closes, not on a timer
theboringhumane Aug 12, 2026
bef3222
Add send/hand-off sounds; document why late replies can't send
theboringhumane Aug 12, 2026
929ec7c
Send iMessage replies for real via Messages scripting
theboringhumane Aug 12, 2026
e5c46bb
Hold system banners open so replies keep working
theboringhumane Aug 12, 2026
5463a43
Always park held banners off-screen
theboringhumane Aug 12, 2026
c74100d
Remove the now-dead "hide system banner" setting
theboringhumane Aug 12, 2026
2fbebce
Add compact mode: a player-only opened notch
theboringhumane Aug 12, 2026
c643479
Match Atoll's compact layout properly
theboringhumane Aug 12, 2026
3e53e53
Compact mode: full transport row, media output, fixed album art badge
theboringhumane Aug 12, 2026
4ef3702
Make the media-output button actually switch devices
theboringhumane Aug 12, 2026
0f34d35
Compact mode: match Atoll's actual dimensions
theboringhumane Aug 12, 2026
f56fed8
Compact mode: pin panel to Atoll's 420x180
theboringhumane Aug 12, 2026
21384d8
Compact mode: narrow the panel by 20% to 336pt
theboringhumane Aug 12, 2026
b3c89d2
Add shuffle/audio output to both layouts; fix compact hover collapse
theboringhumane Aug 12, 2026
027a12e
Compact mode keeps cached track state instead of "Nothing Playing"
theboringhumane Aug 12, 2026
dd0d381
Fix held banner leak that could block the real Notification Center
theboringhumane Aug 12, 2026
10e6bf0
Fix the inline song-change peek layout
theboringhumane Aug 12, 2026
877dbf4
Queue notifications that arrive mid-reply instead of replacing
theboringhumane Aug 12, 2026
a029b92
Scale the battery fill with its width
theboringhumane Aug 12, 2026
001e55e
Make the queued-notification badge a browsable stack
theboringhumane Aug 12, 2026
72bacb9
Draft WhatsApp replies in the conversation instead of the clipboard
theboringhumane Aug 12, 2026
d2b661d
Phase 0 audit remediation: crash fixes, dead-code purge, OSS compliance
theboringhumane Aug 15, 2026
375f3a5
Phase 1 audit remediation: kill background polling, fix OSD hot paths
theboringhumane Aug 15, 2026
6bd0b1d
Phase 2 audit remediation: break the coordinator cycle, decouple arch…
theboringhumane Aug 15, 2026
0ed306a
Phase 3 audit remediation: naming, dedup, conventions, structured log…
theboringhumane Aug 15, 2026
eaf0601
Phase 4 audit remediation: community files, tests, lint, security docs
theboringhumane Aug 15, 2026
ca4c328
Restore DEVELOPMENT_TEAM for the app target (automatic signing)
theboringhumane Aug 15, 2026
5f4ba19
Notification sneek peek: passive marquee mirror instead of focus hija…
theboringhumane Aug 15, 2026
0b6591f
Fix notification peek layout: stable widths, native click-through exp…
theboringhumane Aug 15, 2026
bdf6c0a
Restore music peek layout, fix queue badge routing with peek mode
theboringhumane Aug 15, 2026
ecd90ad
Exclude notification peeks from the inline-OSD lane
theboringhumane Aug 15, 2026
89e4b05
Give the notification peek its own lane, coexisting with everything
theboringhumane Aug 15, 2026
9c640d5
Float the notification peek as free window-space decoration
theboringhumane Aug 15, 2026
180d735
Fix peek latency regression, preserve OTP interactive flow
theboringhumane Aug 15, 2026
0eb6233
Consolidate notification surfaces into one simple flow
theboringhumane Aug 15, 2026
799e86b
Widen OTP chin width to clear the hardware notch
theboringhumane Aug 15, 2026
1d0434a
Cap AXI watcher memory pressure; reinstate bounded idle cadence
theboringhumane Aug 15, 2026
2bd72a8
Reply delivery: per-stage timeouts with banner-first ordering
theboringhumane Aug 15, 2026
231e390
Give the floating peek its own backdrop
theboringhumane Aug 15, 2026
62fbe5e
Render the peek inside the sneak stack (where it was visible) + lane …
theboringhumane Aug 15, 2026
d9f1e8b
Peek pill: kill greedy GeometryReader (the giant black box)
theboringhumane Aug 15, 2026
24cc123
Peek: vertical layout, centered under the hardware notch, stripped text
theboringhumane Aug 15, 2026
a8795d4
Peek is decoration-only again: no notch-width influence whatsoever
theboringhumane Aug 15, 2026
dd8b86c
Notification pill rendered as a real ZStack child, offset below chin
theboringhumane Aug 15, 2026
76f9c2e
Add temporary trace when notch opens (empty-open-panel diagnosis)
theboringhumane Aug 15, 2026
e6231cd
Fix sender app icons on notifications, remove notification sneak peek
theboringhumane Aug 28, 2026
dd7351b
Stop banner keep-alive from stealing keyboard focus while closed
theboringhumane Aug 29, 2026
455b6ef
chore: accept Xcode project normalization (pbxproj dedup, entitlement…
theboringhumane Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .devcontainer/devcontainer.json

This file was deleted.

13 changes: 13 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Code owners for boring.notch
# Reviewers are automatically requested on PRs that touch owned paths.
# Add active maintainers here as the team grows.

# Default owner for the whole repo
* @Alexander5015

# Area-specific expertise
/boringNotch/MediaControllers/ @Alexander5015
/boringNotch/components/OSD/ @Alexander5015
/BoringNotchXPCHelper/ @Alexander5015
/Shared/ @Alexander5015
/.github/workflows/ @Alexander5015
21 changes: 0 additions & 21 deletions .github/ISSUE_TEMPLATE/feature_request.md

This file was deleted.

31 changes: 0 additions & 31 deletions .github/ISSUE_TEMPLATE/old_bug_report.md

This file was deleted.

16 changes: 9 additions & 7 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,20 @@

version: 2
updates:
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
target-branch: "dev"

- package-ecosystem: "pip"
directory: "/Configuration/dmg"
schedule:
interval: "weekly"

- package-ecosystem: "swift"
directory: "/"
schedule:
interval: "weekly"
target-branch: "dev"

# NOTE: no "swift" section. SPM packages live in the xcodeproj-embedded
# manifest (boringNotch.xcodeproj/.../swiftpm/Package.resolved), which
# Dependabot's swift ecosystem cannot read (it requires a root-level
# Package.swift). Swift dependencies are bumped manually; see Package.resolved.

File renamed without changes.
15 changes: 15 additions & 0 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,18 @@ jobs:
verbosity: xcpretty
upload-logs: always
configuration: release

# Unit tests run hosted by the app (TEST_HOST), so they spawn a real
# menubar-app instance on the runner — acceptable on CI where nothing
# else reacts to it; they are skipped on matrix legs without hosted-test
# support if they ever become flaky there.
- name: Test
uses: mxcl/xcodebuild@d3ee9b419c1be9a988086c58fe0988f32d99cfc5 # v3.6.0
with:
xcode: ${{ matrix.xcode }}
platform: macOS
scheme: boringNotch
action: test
verbosity: xcpretty
upload-logs: always
configuration: debug
24 changes: 3 additions & 21 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,23 +1,13 @@
# Xcode
*.xcuserstate
*.xcuserdata
*.xcscheme
*.xcuserdatad
*.xcodeproj/xcuserdata
*.xcodeproj/project.xcuserdata
*.xcodeproj/xcshareddata/WorkspaceSettings.xcsettings
*.pbxuser
*.xccheckout
*.xcscheme
*.xcplayground
*.xcuserdatad
*.xctest
*.xcuserdata
*.xcodeproj/xcshareddata/WorkspaceSettings.xcsettings

# CocoaPods
Pods/
podfile.lock

# Carthage
Carthage/Build/

# Swift Package Manager
.swiftpm/
Expand All @@ -42,14 +32,6 @@ build/
*.vscode/
*.idea/

# User-specific files
*.xcuserdatad/
*.xcscheme
*.xcodeproj/xcuserdata
*.xcodeproj/project.xcuserdata

# Build artifacts
*.ipa
*.xcarchive
*.dSYM

85 changes: 85 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# SwiftLint configuration for boring.notch
# Run with: swiftlint --config .swiftlint.yml
# CI wiring is tracked as a follow-up (needs a lint-capable runner).

# Paths to check
included:
- boringNotch
- BoringNotchXPCHelper
- Shared

# Paths to ignore
excluded:
- boringNotch/Assets.xcassets
- mediaremote-adapter
- updater
- .build

# Crash-vector rules found in the audit — hard errors in new code.
# The few audited, allow-listed legacy sites are excluded per rule below;
# do not add new exclusions.
force_unwrapping:
severity: error
excluded:
# CGEventType(rawValue: 14)! == kCGEventSystemDefined by construction
- boringNotch/observers/MediaKeyInterceptor.swift
# compile-time-known regexes
- boringNotch/helpers/OTPDetector.swift
# hard-bundled placeholder artwork/resource URLs
- boringNotch/managers/MusicManager.swift
- boringNotch/components/Music/LottieAnimationView.swift
- boringNotch/components/Settings/Views/MediaSettingsView.swift

force_cast:
severity: error
excluded:
# XPC secure-coding bridging (NSSet -> Set<AnyHashable> is a guaranteed bridge)
- boringNotch/XPCHelperClient/XPCHelperClient.swift
- BoringNotchXPCHelper/main.swift

force_try:
severity: error

# Opt-in rules matching the house style established during remediation
opt_in_rules:
- empty_count
- empty_string
- first_where
- contains_over_first_is_nil
- flatmap_over_parameter_reduce
- implicitly_unwrapped_optional
- lower_acl_than_parent
- modifier_order
- preferred_final_class
- redundant_nil_coalescing
- unused_enumerated
- vertical_whitespace_closing_braces
- vertical_whitespace_opening_braces

type_body_length:
warning: 400
error: 800

file_length:
warning: 500
error: 1000

function_body_length:
warning: 60
error: 120

line_length:
warning: 160
error: 220

identifier_name:
min_length:
warning: 2
error: 1
max_length:
warning: 40
error: 60
excluded:
- id
- vm
- s
Loading
Loading