Skip to content

Commit 92a7611

Browse files
committed
fix: update docs for ironmark/Rust, fix theme count, fix download temp file race
- Add Rust to prerequisites in all docs (README, AGENTS, getting-started, installation) - Add CIronmark and Vendor/ironmark to project structure docs - Fix clone URL placeholder (your-username -> ph1p) - Update theme count from 14 to 32 with all missing themes - Update test counts (391/492 -> 717) - Remove non-existent Renderer/ directory from contributing docs - Fix update download: move temp file synchronously in delegate callback before URLSession deletes it, instead of deferring to main queue
1 parent f1ddc0a commit 92a7611

File tree

8 files changed

+48
-27
lines changed

8 files changed

+48
-27
lines changed

.claude/CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Full docs: https://ph1p.github.io/boo/
66
## Build
77

88
```bash
9-
make setup # First time: clone Ghostty + build GhosttyKit + build Boo
9+
make setup # First time: clone Ghostty + build GhosttyKit + build ironmark + build Boo
1010
make run # Build and launch
1111
make test # Run tests
1212
make lint # Check code style

AGENTS.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ Full documentation: https://ph1p.github.io/boo/
88

99
- **Swift** (macOS 13+), **AppKit**, **GhosttyKit** (Metal GPU rendering)
1010
- Swift Package Manager (`Package.swift`)
11-
- Prerequisites: macOS 13+, Xcode CLT, Zig 0.15+ (`brew install zig`)
11+
- Prerequisites: macOS 13+, Xcode CLT, Zig 0.15+ (`brew install zig`), Rust (`rustup`)
1212

1313
```bash
14-
make setup # First time: clone Ghostty + build GhosttyKit + build Boo
14+
make setup # First time: clone Ghostty + build GhosttyKit + build ironmark + build Boo
1515
make run # Build and launch
1616
make test # Run tests
1717
swift build # Build only (requires GhosttyKit already built)
@@ -37,6 +37,7 @@ Boo/ Library target (all app code)
3737
Services/ TerminalBridge, RemoteExplorer, BooSocketServer, AutoUpdater
3838
BooApp/ Executable entry point (just calls BooMain.run())
3939
CGhostty/ C module wrapping ghostty.h
40+
CIronmark/ C module wrapping ironmark (Rust markdown parser)
4041
Tests/BooTests/ 717 tests
4142
documentation/ Vocs documentation site
4243
```

Boo/Services/AutoUpdater.swift

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,9 @@ final class AutoUpdater: ObservableObject {
162162
// Clean up previous downloads
163163
try? FileManager.default.removeItem(at: destURL)
164164

165-
let delegate = DownloadDelegate { [weak self] progress in
165+
let delegate = DownloadDelegate(destinationURL: destURL) { [weak self] progress in
166166
DispatchQueue.main.async { self?.state = .downloading(progress: progress) }
167-
} completion: { [weak self] tempURL, error in
167+
} completion: { [weak self] savedURL, error in
168168
DispatchQueue.main.async {
169169
guard let self else { return }
170170
self.downloadSession?.finishTasksAndInvalidate()
@@ -174,16 +174,11 @@ final class AutoUpdater: ObservableObject {
174174
self.state = .error(error.localizedDescription)
175175
return
176176
}
177-
guard let tempURL else {
177+
guard let savedURL else {
178178
self.state = .error("Download failed")
179179
return
180180
}
181-
do {
182-
try FileManager.default.moveItem(at: tempURL, to: destURL)
183-
self.state = .readyToInstall(dmgURL: destURL)
184-
} catch {
185-
self.state = .error("Failed to save: \(error.localizedDescription)")
186-
}
181+
self.state = .readyToInstall(dmgURL: savedURL)
187182
}
188183
}
189184

@@ -389,14 +384,23 @@ final class AutoUpdater: ObservableObject {
389384
private class DownloadDelegate: NSObject, URLSessionDownloadDelegate {
390385
let onProgress: (Double) -> Void
391386
let onCompletion: (URL?, Error?) -> Void
387+
let destinationURL: URL
392388

393-
init(onProgress: @escaping (Double) -> Void, completion: @escaping (URL?, Error?) -> Void) {
389+
init(destinationURL: URL, onProgress: @escaping (Double) -> Void, completion: @escaping (URL?, Error?) -> Void) {
390+
self.destinationURL = destinationURL
394391
self.onProgress = onProgress
395392
self.onCompletion = completion
396393
}
397394

398395
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
399-
onCompletion(location, nil)
396+
// Move immediately — the temp file is deleted when this method returns
397+
do {
398+
try? FileManager.default.removeItem(at: destinationURL)
399+
try FileManager.default.moveItem(at: location, to: destinationURL)
400+
onCompletion(destinationURL, nil)
401+
} catch {
402+
onCompletion(nil, error)
403+
}
400404
}
401405

402406
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,15 @@ Download the latest release from [GitHub Releases](https://github.com/ph1p/boo/r
4545
- **macOS 13+** (Ventura or later)
4646
- **Xcode Command Line Tools** — `xcode-select --install`
4747
- **Zig 0.15+** — `brew install zig`
48+
- **Rust** — `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`
4849
- **Metal Toolchain** — `xcodebuild -downloadComponent MetalToolchain` (if not already installed)
4950
5051
### Quick Start
5152
5253
```bash
5354
git clone --recursive https://github.com/ph1p/boo.git
5455
cd boo
55-
make setup # Builds GhosttyKit + Boo
56+
make setup # Builds GhosttyKit + ironmark + Boo
5657
make run # Build and launch
5758
```
5859
@@ -119,8 +120,10 @@ Boo/
119120
Views/ App-level views (PaneView, StatusBarView, ToolbarView, SettingsWindow, UpdateWindow, etc.)
120121
Services/ Shared infrastructure (TerminalBridge, RemoteExplorer, BooSocketServer, AutoUpdater, etc.)
121122
CGhostty/ C module wrapping ghostty.h
123+
CIronmark/ C module wrapping ironmark (Rust markdown parser)
122124
CPTYHelper/ C helper for forkpty()
123-
Vendor/ghostty/ Ghostty source (git clone)
125+
Vendor/ghostty/ Ghostty source (git submodule)
126+
Vendor/ironmark/ ironmark source (git submodule)
124127
```
125128
126129
### State Model

documentation/docs/pages/contributing.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ CI runs `make lint` on every pull request. Format your code before pushing.
3030
Boo/
3131
App/ AppDelegate, MainWindowController, WindowStateCoordinator
3232
Ghostty/ GhosttyRuntime, GhosttyView (Metal GPU rendering)
33-
Terminal/ VT100Terminal (fallback parser), TerminalBackend protocol
34-
Renderer/ TerminalView (CoreText fallback renderer)
33+
Terminal/ TerminalBackend protocol
3534
Models/ Workspace, Pane, SplitTree, AppSettings, Theme
3635
Plugin/ Core plugin framework (protocol, registry, runtime, DSL)
3736
Plugins/ Built-in plugins (FileTree/, Git/, Docker/, Bookmarks/)
3837
Views/ App-level views (ToolbarView, PaneView, StatusBarView)
39-
Services/ Shared infrastructure (RemoteExplorer, TerminalBridge)
38+
Services/ Shared infrastructure (RemoteExplorer, TerminalBridge, MarkdownRenderer)
4039
CGhostty/ C module wrapping ghostty.h
40+
CIronmark/ C module wrapping ironmark (Rust markdown parser)
4141
CPTYHelper/ C helper for forkpty()
42-
Tests/ 391+ tests mirroring source structure
42+
Tests/ 717+ tests mirroring source structure
4343
```
4444

4545
See [Architecture](/architecture) for detailed design documentation.

documentation/docs/pages/features.mdx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,31 @@ Toggle the sidebar with **Cmd+B**. The explorer shows a live-updating file tree
3434

3535
## Themes
3636

37-
14 built-in color themes with live preview swatches in settings:
37+
32 built-in color themes with live preview swatches in settings:
3838

3939
| Theme | Variants |
4040
|---|---|
41+
| Default | Dark, Light |
4142
| Catppuccin | Mocha, Macchiato, Frappé, Latte |
4243
| Tokyo Night ||
4344
| Dracula ||
4445
| Nord ||
4546
| Solarized | Dark, Light |
46-
| Gruvbox | |
47-
| One Dark | |
47+
| Gruvbox | Dark, Light |
48+
| One | Dark, Light |
4849
| Rosé Pine ||
4950
| Kanagawa ||
50-
| Default Dark ||
51+
| Everforest | Dark, Light |
52+
| GitHub | Dark, Light |
53+
| Ayu | Dark, Light |
54+
| Monokai ||
55+
| Material | Dark, Light |
56+
| Palenight ||
57+
| Horizon Dark ||
58+
| Cobalt2 ||
59+
| Night Owl ||
60+
| Synthwave '84 ||
61+
| Moonlight ||
5162

5263
## Sidebar Plugins
5364

documentation/docs/pages/getting-started.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
- **macOS 13+** (Ventura or later)
66
- **Xcode Command Line Tools**`xcode-select --install`
77
- **Zig 0.15+**`brew install zig`
8+
- **Rust**`curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`
89
- **Metal Toolchain**`xcodebuild -downloadComponent MetalToolchain` (if not already installed)
910

1011
## Build
1112

1213
### 1. Clone the repository
1314

1415
```bash
15-
git clone --recursive https://github.com/your-username/boo.git
16+
git clone --recursive https://github.com/ph1p/boo.git
1617
cd boo
1718
```
1819

documentation/docs/pages/installation.mdx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ The archive includes the `ghostty` GTK binary alongside `boo`. Requires GTK4 and
2626

2727
### macOS
2828

29-
**Prerequisites:** macOS 13+, Xcode CLT, Zig 0.15+, Metal Toolchain
29+
**Prerequisites:** macOS 13+, Xcode CLT, Zig 0.15+, Rust, Metal Toolchain
3030

3131
```bash
3232
git clone --recursive https://github.com/ph1p/boo.git
@@ -93,7 +93,7 @@ make tarball # Linux: create distributable tar.gz
9393
### Running Tests
9494

9595
```bash
96-
make test # Runs all 492+ tests (macOS)
96+
make test # Runs all 717+ tests (macOS)
9797
```
9898

9999
## System Requirements
@@ -106,6 +106,7 @@ make test # Runs all 492+ tests (macOS)
106106
| Architecture | Apple Silicon (arm64) |
107107
| Disk space | ~200MB (including GhosttyKit) |
108108
| Zig (build only) | 0.15+ |
109+
| Rust (build only) | stable |
109110

110111
### Linux
111112

0 commit comments

Comments
 (0)