Skip to content

feat(sketchybar): add Noctalia-style macOS bar - #155

Merged
CollieIsCute merged 31 commits into
masterfrom
feature/sketchybar
Sep 14, 2026
Merged

CollieIsCute merged 31 commits into
masterfrom
feature/sketchybar

Conversation

@CollieIsCute

@CollieIsCute CollieIsCute commented Sep 12, 2026

Copy link
Copy Markdown
Owner

macOS 使用由 AeroSpace 啟動的 SketchyBar,接上現有 Matugen、CodexBar 與 Stats。保留原生列交替顯示,不停用 SIP、不增加第三方套件。

本輪範圍

  • 移除 SketchyBar 的 App tray 與控制中心按鈕;原生 App 選單照常使用,控制中心沿用 Fn+C。
  • Stats CPU/RAM/感測器/網路縮成一組。Hover 重用 Stats 原生 tooltip(模組/圖表名稱),點擊開對應原生詳細面板。
  • GPT/Claude 同時顯示各自原生圖示與用量、共用一個背景框;hover 共用分格用量與重置倒數,左鍵開對應 provider 詳細選單,右鍵刷新摘要。
  • 顯示目前輸入法的原生圖示,切換後同步。
  • 相鄰 capsule(group/單一)外距與左右畫面留白統一 8 pt;GPT/Claude 使用 85% 原生縮放、移除組內額外 padding,實測同樣百分比下群組由 152 縮至 125 pt。
  • Workspace 只顯示有視窗的工作區,加上目前所在工作區(即使空白);保留數字順序與 magic → M。事件更新加每 2 秒校正,涵蓋背景視窗搬移。
  • 時鐘使用大寫國字月份、阿拉伯日期與 24 小時制秒數,例如「玖月 14 12:34:56」;月份、日期、時間間各留一個半形空格。
  • README 只保留安裝、設定、操作、快捷鍵與排錯;刪除非使用說明。
  • sketchybar-plan.html 僅保留本機,取消 Git 追蹤並加入忽略清單;未改寫既有遠端歷史。
  • 原生化精簡:設定、腳本與 helper 合計 608 → 534 行(淨減 74 行)。共用 capsule/popup 樣式與滑鼠事件;使用原生 icon highlight 簡化 workspace;音量只共用一次讀取;CodexBar 解析對齊上游 0.60.1 格式。兩個 Swift helper、必要鎖定與錯誤處理保留,沒有增加套件或改動 CI。

實作邊界

  • macOS 26 的多個原生項目同名 控制中心,Item-0;短命 Swift helper 以公開 AXExtrasMenuBar 與 CGWindow 幾何辨識,只接受 Stats、CodexBar、輸入法三個 bundle。點擊前重新查詢,遺失或不唯一時拒絕點擊。
  • SketchyBar alias 保留原生圖像;具名項目可重綁,匿名輸入法項目重建或原生項目重新排列後需要 reload。
  • Chezmoi 在 macOS 使用既有 CLT 編譯 helper,設定 CodexBar 原生 mergeIcons=false;帳號與憑證設定不變。
  • 沿用公開 Carbon menu-bar shown/hidden 事件做交替;任一螢幕原生列可見時暫時隱藏 SketchyBar。沒有 event tap、私有 SkyLight API、新常駐服務或 LaunchAgent。
  • 保留原有 Matugen、36 pt 透明列與 200 pt 瀏海保留區。移除前次 MR 多餘的依賴宣告;沒有新增依賴 workaround。

本機驗收

  • 實際套用 chezmoi 設定;用同一安裝模板編譯兩個 Swift helper。
  • Stats 四個 hover 均顯示正確原生名稱;CPU/RAM 實際滑鼠點擊開正確面板。
  • GPT/Claude 兩端 hover 顯示共用額度與 reset 倒數;兩端點擊開各自詳細選單。
  • ABC/唯音繁體切換後圖示同步,測試後已恢復原本輸入來源。
  • 專用測試視窗移入 9/magic 時出現、移走/關閉後隱藏;切入空 workspace 9 時仍顯示並高亮。測試視窗已關閉,未搬動使用者工作視窗。
  • 游標到頂端叫出原生列時 SketchyBar 隱藏,原生列收起後恢復;查詢確認無 tray/控制中心按鈕。
  • Brave 實際開啟本地 HTML 計畫並確認畫面。
  • 以正在顯示的 bar 幾何斷言 Stats→音量、音量→輸入法及左右留白均為 8 pt;縮小後的 GPT/Claude 兩端 hover/click 再次截圖確認正常。
  • 時鐘套用後,實際 query 與截圖確認「玖月 14 HH:MM:SS」;一次性檢查涵蓋各月份與日期格式,未新增測試腳本。
  • README 快捷鍵表保留;plan 取消追蹤前後本機檔案 SHA-256 一致,MR 最新檔案列表不包含 plan。
  • 精簡後再驗:16 個 widget 的靜態外觀屬性與修改前一致;四個 Stats hover、CPU/RAM click、GPT/Claude hover/click、動態工作區與原生列交替顯示均經實際操作確認。
  • 實際音量滾輪 19% → 22% → 19%,點擊靜音再取消;已還原原本音量與靜音狀態。
  • 精簡後實際右鍵點擊 GPT/Claude,兩端各自成功刷新共用摘要,讀取時間更新。
  • 外接螢幕、睡眠、重新登入:本輪未操作,不宣稱通過。

Stats hover 是上游原生名稱提示,不是另製 CPU/RAM 即時資料面板。Fn+C 沿用使用者現有操作;本輪程式合成按鍵未叫出控制中心,不當成成功驗收。

安裝 CI

不新增功能測試腳本、不修改 workflow,保留 chezmoi init --apply -v。CI 驗證 macOS/Arch/Ubuntu/Windows 安裝,介面功能在本機驗收。

最新提交:4098364d96a71c035b8e287b031edd4a2b997f88四平台安裝 CI 首次執行全部成功:macOS/Arch/Ubuntu/Windows,無需重跑。

Add the macOS-only package and shell configuration for workspace state, clock, 3% volume controls, CodexBar, Stats, and tray aliases. Keep aliases native and optional so missing permissions or applications do not block startup.\n\nValidation: tests/sketchybar.sh; Brewfile formula/cask parsing; AeroSpace TOML parsing; git diff --check.
Generate only the five colors consumed by SketchyBar, reload after theme changes, and include the template hash in the existing theme apply trigger.\n\nValidation: rendered the template with Matugen; parsed the rendered macOS TOML; tests/sketchybar.sh; git diff --check.
Run the repository's focused SketchyBar shell and Matugen checks after the macOS chezmoi apply job.\n\nValidation: Psych.parse_file; tests/sketchybar.sh; full chezmoi dry-run.
Record first-run permissions and app settings, the native alias fallback boundary, and the 30-project research plan used for the implementation.
Delay the initial reload briefly so CodexBar and Stats can publish their native menu items before alias discovery. Start SketchyBar only when reload finds no running instance.\n\nValidation: tests/sketchybar.sh; AeroSpace TOML parsing; git diff --check.
Point workspace checks at the source fixture so an applied Matugen palette in HOME cannot change deterministic fallback-color assertions.\n\nReproduced with a conflicting HOME palette before the fix and passed with the same setup after it.
@CollieIsCute
CollieIsCute merged commit 10c315c into master Sep 14, 2026
4 checks passed
@CollieIsCute
CollieIsCute deleted the feature/sketchybar branch September 14, 2026 06:06
CollieIsCute added a commit that referenced this pull request Sep 14, 2026
macOS 使用由 AeroSpace 啟動的 SketchyBar,接上現有 Matugen、CodexBar 與
Stats。保留原生列交替顯示,不停用 SIP、不增加第三方套件。

## 本輪範圍

- 移除 SketchyBar 的 App tray 與控制中心按鈕;原生 App 選單照常使用,控制中心沿用 Fn+C。
- Stats CPU/RAM/感測器/網路縮成一組。Hover 重用 Stats 原生
tooltip(模組/圖表名稱),點擊開對應原生詳細面板。
- GPT/Claude 同時顯示各自原生圖示與用量、共用一個背景框;hover 共用分格用量與重置倒數,左鍵開對應 provider
詳細選單,右鍵刷新摘要。
- 顯示目前輸入法的原生圖示,切換後同步。
- 相鄰 capsule(group/單一)外距與左右畫面留白統一 8 pt;GPT/Claude 使用 85% 原生縮放、移除組內額外
padding,實測同樣百分比下群組由 152 縮至 125 pt。
- Workspace 只顯示有視窗的工作區,加上目前所在工作區(即使空白);保留數字順序與 magic → M。事件更新加每 2
秒校正,涵蓋背景視窗搬移。
- 時鐘使用大寫國字月份、阿拉伯日期與 24 小時制秒數,例如「玖月 14 12:34:56」;月份、日期、時間間各留一個半形空格。
- README 只保留安裝、設定、操作、快捷鍵與排錯;刪除非使用說明。
- `sketchybar-plan.html` 僅保留本機,取消 Git 追蹤並加入忽略清單;未改寫既有遠端歷史。
- 原生化精簡:設定、腳本與 helper 合計 608 → 534 行(淨減 74 行)。共用 capsule/popup
樣式與滑鼠事件;使用原生 icon highlight 簡化 workspace;音量只共用一次讀取;CodexBar 解析對齊上游
0.60.1 格式。兩個 Swift helper、必要鎖定與錯誤處理保留,沒有增加套件或改動 CI。

## 實作邊界

- macOS 26 的多個原生項目同名 `控制中心,Item-0`;短命 Swift helper 以公開 AXExtrasMenuBar 與
CGWindow 幾何辨識,只接受 Stats、CodexBar、輸入法三個 bundle。點擊前重新查詢,遺失或不唯一時拒絕點擊。
- SketchyBar alias 保留原生圖像;具名項目可重綁,匿名輸入法項目重建或原生項目重新排列後需要 reload。
- Chezmoi 在 macOS 使用既有 CLT 編譯 helper,設定 CodexBar 原生
`mergeIcons=false`;帳號與憑證設定不變。
- 沿用公開 Carbon menu-bar shown/hidden 事件做交替;任一螢幕原生列可見時暫時隱藏 SketchyBar。沒有
event tap、私有 SkyLight API、新常駐服務或 LaunchAgent。
- 保留原有 Matugen、36 pt 透明列與 200 pt 瀏海保留區。移除前次 MR 多餘的依賴宣告;沒有新增依賴
workaround。

## 本機驗收

- [x] 實際套用 chezmoi 設定;用同一安裝模板編譯兩個 Swift helper。
- [x] Stats 四個 hover 均顯示正確原生名稱;CPU/RAM 實際滑鼠點擊開正確面板。
- [x] GPT/Claude 兩端 hover 顯示共用額度與 reset 倒數;兩端點擊開各自詳細選單。
- [x] ABC/唯音繁體切換後圖示同步,測試後已恢復原本輸入來源。
- [x] 專用測試視窗移入 9/magic 時出現、移走/關閉後隱藏;切入空 workspace 9
時仍顯示並高亮。測試視窗已關閉,未搬動使用者工作視窗。
- [x] 游標到頂端叫出原生列時 SketchyBar 隱藏,原生列收起後恢復;查詢確認無 tray/控制中心按鈕。
- [x] Brave 實際開啟本地 HTML 計畫並確認畫面。
- [x] 以正在顯示的 bar 幾何斷言 Stats→音量、音量→輸入法及左右留白均為 8 pt;縮小後的 GPT/Claude 兩端
hover/click 再次截圖確認正常。
- [x] 時鐘套用後,實際 query 與截圖確認「玖月 14 HH:MM:SS」;一次性檢查涵蓋各月份與日期格式,未新增測試腳本。
- [x] README 快捷鍵表保留;plan 取消追蹤前後本機檔案 SHA-256 一致,MR 最新檔案列表不包含 plan。
- [x] 精簡後再驗:16 個 widget 的靜態外觀屬性與修改前一致;四個 Stats hover、CPU/RAM
click、GPT/Claude hover/click、動態工作區與原生列交替顯示均經實際操作確認。
- [x] 實際音量滾輪 19% → 22% → 19%,點擊靜音再取消;已還原原本音量與靜音狀態。
- [x] 精簡後實際右鍵點擊 GPT/Claude,兩端各自成功刷新共用摘要,讀取時間更新。
- [ ] 外接螢幕、睡眠、重新登入:本輪未操作,不宣稱通過。

Stats hover 是上游原生名稱提示,不是另製 CPU/RAM 即時資料面板。Fn+C
沿用使用者現有操作;本輪程式合成按鍵未叫出控制中心,不當成成功驗收。

## 安裝 CI

不新增功能測試腳本、不修改 workflow,保留 `chezmoi init --apply -v`。CI 驗證
macOS/Arch/Ubuntu/Windows 安裝,介面功能在本機驗收。

最新提交:`4098364d96a71c035b8e287b031edd4a2b997f88`。[四平台安裝
CI](https://github.com/CollieIsCute/dotfiles/actions/runs/34772324387)
首次執行全部成功:macOS/Arch/Ubuntu/Windows,無需重跑。
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