@carlesandres/house 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +59 -128
- package/README.md +40 -12
- package/package.json +3 -2
- package/src/Browser.tsx +482 -109
- package/src/CommandPalette.tsx +150 -0
- package/src/Footer.tsx +122 -55
- package/src/Header.tsx +68 -0
- package/src/HelpOverlay.tsx +59 -41
- package/src/brand.ts +7 -0
- package/src/cli/argv.ts +61 -2
- package/src/commands/buildCommands.ts +102 -0
- package/src/commands/paletteOnlyCommands.ts +16 -0
- package/src/commands/score.ts +78 -0
- package/src/commands/types.ts +26 -0
- package/src/config/load.ts +231 -0
- package/src/discovery/walk.ts +67 -23
- package/src/index.tsx +163 -32
- package/src/keymap/browser.ts +26 -11
- package/src/layout/resolve.ts +60 -0
- package/src/theme/colors.ts +51 -15
- package/src/theme/types.ts +7 -0
- package/src/update/cache.ts +77 -0
- package/src/update/check.ts +165 -0
- package/src/update/compare.ts +41 -0
- package/src/update/notice.ts +29 -0
- package/src/update/runtime.ts +48 -0
- package/src/update/useUpdateNotice.ts +24 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,94 +1,75 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to house land here. Format follows
|
|
4
|
-
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
|
|
5
|
-
follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from
|
|
6
|
-
v0.1.0 onward.
|
|
3
|
+
All notable changes to house land here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from v0.1.0 onward.
|
|
7
4
|
|
|
8
|
-
The publish workflow (`.github/workflows/publish.yml`) runs on the
|
|
9
|
-
`release: published` event, runs `npm publish` via Trusted Publisher,
|
|
10
|
-
and lets GitHub auto-generate release notes from commit subjects; this
|
|
11
|
-
file is the curated, narrative version.
|
|
5
|
+
The publish workflow (`.github/workflows/publish.yml`) runs on the `release: published` event, runs `npm publish` via Trusted Publisher, and lets GitHub auto-generate release notes from commit subjects; this file is the curated, narrative version.
|
|
12
6
|
|
|
13
7
|
## [Unreleased]
|
|
14
8
|
|
|
9
|
+
## [0.4.1] — 2026-05-22
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Header chrome: borderless one-row identity strip above the panes carries the ⌂ brand mark and running version. Renders in both directory mode (Browser) and single-file mode (App). Hidden on terminals shorter than 20 rows so tight panes keep the reader breathable.
|
|
14
|
+
|
|
15
|
+
## [0.4.0] — 2026-05-21
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Command palette v1: `ctrl+p` opens a modal palette with visible browser commands derived from the keymap, including quit, sidebar toggle, help, filter, open-in-browser, and theme controls.
|
|
20
|
+
- Palette search uses a small tiered scorer so empty queries stay in keymap order while typed queries rank stronger title and word-boundary matches.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Reader scroll focus is suspended while overlays are open, preventing palette arrow navigation from scrolling the markdown pane behind the modal.
|
|
25
|
+
|
|
26
|
+
### Tests
|
|
27
|
+
|
|
28
|
+
- Added command-palette interaction coverage plus scroll regression checks.
|
|
29
|
+
|
|
15
30
|
## [0.3.1] — 2026-05-17
|
|
16
31
|
|
|
17
32
|
Beta release gates (DESIGN §10.2) closed.
|
|
18
33
|
|
|
19
34
|
### Fixed
|
|
20
35
|
|
|
21
|
-
- Language-tagged fenced code blocks no longer disappear while markdown
|
|
22
|
-
|
|
23
|
-
markdown/code-block rendering fixes, and the browser pane no longer
|
|
24
|
-
remounts markdown for one file while still holding another file's loaded
|
|
25
|
-
content.
|
|
26
|
-
- Strikethrough text (`~~strike~~`) now renders distinctly (dim + muted
|
|
27
|
-
foreground) instead of as plain body text. opentui's syntax-style API
|
|
28
|
-
has no true strikethrough attribute; this is the closest visual we can
|
|
29
|
-
produce, documented in DESIGN §5.1.
|
|
36
|
+
- Language-tagged fenced code blocks no longer disappear while markdown highlighting settles. `house` now uses opentui `0.2.12`, which includes markdown/code-block rendering fixes, and the browser pane no longer remounts markdown for one file while still holding another file's loaded content.
|
|
37
|
+
- Strikethrough text (`~~strike~~`) now renders distinctly (dim + muted foreground) instead of as plain body text. opentui's syntax-style API has no true strikethrough attribute; this is the closest visual we can produce, documented in DESIGN §5.1.
|
|
30
38
|
|
|
31
39
|
### Changed
|
|
32
40
|
|
|
33
41
|
- Reduced re-renders and allocations in `Browser` / `Footer` hot paths.
|
|
34
|
-
- DESIGN §10.2 test gate rephrased to target the integration surface
|
|
35
|
-
house owns (the tree-sitter scope map) rather than re-testing opentui's
|
|
36
|
-
renderer; `test/theme-syntax-map.test.ts` enforces scope coverage for
|
|
37
|
-
every node type §5.1.3 promises.
|
|
42
|
+
- DESIGN §10.2 test gate rephrased to target the integration surface house owns (the tree-sitter scope map) rather than re-testing opentui's renderer; `test/theme-syntax-map.test.ts` enforces scope coverage for every node type §5.1.3 promises.
|
|
38
43
|
|
|
39
44
|
### Docs
|
|
40
45
|
|
|
41
|
-
- README embeds a VHS-generated demo gif; `tape/` holds the source
|
|
42
|
-
|
|
43
|
-
- `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient`
|
|
44
|
-
/ `TestRecorder` testing patterns and the "before blaming `<markdown>`"
|
|
45
|
-
stale-watcher debugging checklist.
|
|
46
|
+
- README embeds a VHS-generated demo gif; `tape/` holds the source scripts.
|
|
47
|
+
- `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient` / `TestRecorder` testing patterns and the "before blaming `<markdown>`" stale-watcher debugging checklist.
|
|
46
48
|
|
|
47
49
|
## [0.3.0] — 2026-05-16
|
|
48
50
|
|
|
49
51
|
### Changed
|
|
50
52
|
|
|
51
|
-
- **Project renamed from `openmdr` to `house`.** The npm package is now
|
|
52
|
-
|
|
53
|
-
not receive further releases. The CLI binary is now `house` (was
|
|
54
|
-
`openmdr`). The GitHub repository moved to
|
|
55
|
-
`https://github.com/carlesandres/house`; GitHub auto-redirects old
|
|
56
|
-
URLs and issue/PR numbers are preserved. The theme schema file moved
|
|
57
|
-
to `schema/house-theme.schema.json` and its `$id` is now a GitHub URL
|
|
58
|
-
on the new repo.
|
|
59
|
-
- `/` is no longer reserved (DESIGN.md §7.3) — it now drives the filter
|
|
60
|
-
input.
|
|
53
|
+
- **Project renamed from `openmdr` to `house`.** The npm package is now `@carlesandres/house`; `@carlesandres/openmdr` is deprecated and will not receive further releases. The CLI binary is now `house` (was `openmdr`). The GitHub repository moved to `https://github.com/carlesandres/house`; GitHub auto-redirects old URLs and issue/PR numbers are preserved. The theme schema file moved to `schema/house-theme.schema.json` and its `$id` is now a GitHub URL on the new repo.
|
|
54
|
+
- `/` is no longer reserved (DESIGN.md §7.3) — it now drives the filter input.
|
|
61
55
|
|
|
62
56
|
### Added
|
|
63
57
|
|
|
64
|
-
- `--sort <mode>` flag selecting the per-directory group order in the
|
|
65
|
-
|
|
66
|
-
files; `files-first` flips it, surfacing top-level files like
|
|
67
|
-
`README.md` before nested subtrees.
|
|
68
|
-
- `/` opens a filter input at the bottom of the sidebar. Typed
|
|
69
|
-
characters narrow the list with a fuzzy subsequence match on the
|
|
70
|
-
file's relative path; matches are re-ranked by score (word-boundary
|
|
71
|
-
and consecutive-character bonuses). Esc clears the query and closes
|
|
72
|
-
the filter; Return closes it and focuses the reader on the highlighted
|
|
73
|
-
match.
|
|
58
|
+
- `--sort <mode>` flag selecting the per-directory group order in the sidebar. `dirs-first` (the existing default) keeps directories above files; `files-first` flips it, surfacing top-level files like `README.md` before nested subtrees.
|
|
59
|
+
- `/` opens a filter input at the bottom of the sidebar. Typed characters narrow the list with a fuzzy subsequence match on the file's relative path; matches are re-ranked by score (word-boundary and consecutive-character bonuses). Esc clears the query and closes the filter; Return closes it and focuses the reader on the highlighted match.
|
|
74
60
|
|
|
75
61
|
## [0.2.1] — 2026-05-13
|
|
76
62
|
|
|
77
63
|
### Added
|
|
78
64
|
|
|
79
|
-
- Footer hint row in the browser pane, generated from the keymap so the
|
|
80
|
-
|
|
81
|
-
- `ROADMAP.md` as the single index of planned work; footer/header chrome
|
|
82
|
-
issues registered there.
|
|
65
|
+
- Footer hint row in the browser pane, generated from the keymap so the visible hints stay in sync with the bindings.
|
|
66
|
+
- `ROADMAP.md` as the single index of planned work; footer/header chrome issues registered there.
|
|
83
67
|
|
|
84
68
|
### Changed
|
|
85
69
|
|
|
86
70
|
- Sidebar toggle rebound from `\` to `s`.
|
|
87
|
-
- Help overlay: theme keys (`t` / `T` / `L`) now cycle while the overlay
|
|
88
|
-
|
|
89
|
-
showing.
|
|
90
|
-
- `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved
|
|
91
|
-
for history and bookmarks.
|
|
71
|
+
- Help overlay: theme keys (`t` / `T` / `L`) now cycle while the overlay is open; the help hint label switches to `close` while the overlay is showing.
|
|
72
|
+
- `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved for history and bookmarks.
|
|
92
73
|
|
|
93
74
|
### Fixed
|
|
94
75
|
|
|
@@ -99,42 +80,17 @@ Beta release gates (DESIGN §10.2) closed.
|
|
|
99
80
|
|
|
100
81
|
### Added — themes
|
|
101
82
|
|
|
102
|
-
- **33 bundled JSON themes** selectable via `--theme <id>`: `aura`, `ayu`,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
`osaka-jade`, `palenight`, `rosepine`, `solarized`, `synthwave84`,
|
|
108
|
-
`tokyonight`, `vercel`, `vesper`, `zenburn`. Token values sourced
|
|
109
|
-
directly from each upstream's canonical palette via
|
|
110
|
-
`dev/build-themes.ts`.
|
|
111
|
-
- **`--tone dark|light`** flag to select the variant of a theme. Defaults
|
|
112
|
-
to `dark`. Not all themes have a well-tuned light variant; quality is
|
|
113
|
-
best-effort for those.
|
|
114
|
-
- **JSON theme format**: each theme is a `{defs, theme: {dark, light}}`
|
|
115
|
-
file validated against `schema/openmdr-theme.schema.json`. The format
|
|
116
|
-
mirrors opencode's TUI theme shape; `defs` supports variable
|
|
117
|
-
substitution.
|
|
118
|
-
- **`dev/build-themes.ts`**: fetches themes from the opencode GitHub API,
|
|
119
|
-
strips diff tokens, resolves variables, and regenerates `src/theme/loader.ts`.
|
|
120
|
-
Supports `GITHUB_TOKEN` and `--dry-run`. Not shipped in the npm package.
|
|
121
|
-
- **Runtime theme cycling**: press `t` / `T` to step forward / backward
|
|
122
|
-
through all themes without restarting. Press `L` (shift+l) to toggle
|
|
123
|
-
between dark and light tone. Works in both browser mode and single-file
|
|
124
|
-
mode. Theme changes take effect immediately; syntax highlighting
|
|
125
|
-
rebuilds with the new palette.
|
|
83
|
+
- **33 bundled JSON themes** selectable via `--theme <id>`: `aura`, `ayu`, `carbonfox`, `catppuccin`, `catppuccin-frappe`, `catppuccin-macchiato`, `cobalt2`, `cursor`, `dracula`, `everforest`, `flexoki`, `github`, `gruvbox`, `kanagawa`, `lucent-orng`, `material`, `matrix`, `mercury`, `monokai`, `nightowl`, `nord`, `one-dark`, `opencode`, `orng`, `osaka-jade`, `palenight`, `rosepine`, `solarized`, `synthwave84`, `tokyonight`, `vercel`, `vesper`, `zenburn`. Token values sourced directly from each upstream's canonical palette via `dev/build-themes.ts`.
|
|
84
|
+
- **`--tone dark|light`** flag to select the variant of a theme. Defaults to `dark`. Not all themes have a well-tuned light variant; quality is best-effort for those.
|
|
85
|
+
- **JSON theme format**: each theme is a `{defs, theme: {dark, light}}` file validated against `schema/openmdr-theme.schema.json`. The format mirrors opencode's TUI theme shape; `defs` supports variable substitution.
|
|
86
|
+
- **`dev/build-themes.ts`**: fetches themes from the opencode GitHub API, strips diff tokens, resolves variables, and regenerates `src/theme/loader.ts`. Supports `GITHUB_TOKEN` and `--dry-run`. Not shipped in the npm package.
|
|
87
|
+
- **Runtime theme cycling**: press `t` / `T` to step forward / backward through all themes without restarting. Press `L` (shift+l) to toggle between dark and light tone. Works in both browser mode and single-file mode. Theme changes take effect immediately; syntax highlighting rebuilds with the new palette.
|
|
126
88
|
|
|
127
89
|
### Changed
|
|
128
90
|
|
|
129
|
-
- Theme system replaced: derivation engine (`derive.ts`) and the 12
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
`App`, `HelpOverlay`) required no changes beyond the re-render wiring.
|
|
133
|
-
- `--theme` default changed from `dark` to `opencode` (the opencode
|
|
134
|
-
project's own palette).
|
|
135
|
-
- Effect Atoms (`@effect/atom-react`) wired for re-render signalling:
|
|
136
|
-
`themeAtom` holds `{ id, tone }`; `RegistryProvider` wraps both render
|
|
137
|
-
paths in `index.tsx`.
|
|
91
|
+
- Theme system replaced: derivation engine (`derive.ts`) and the 12 TS-value themes removed in favour of the JSON format above. The `ColorPalette` interface is unchanged; existing consumers (`Browser`, `App`, `HelpOverlay`) required no changes beyond the re-render wiring.
|
|
92
|
+
- `--theme` default changed from `dark` to `opencode` (the opencode project's own palette).
|
|
93
|
+
- Effect Atoms (`@effect/atom-react`) wired for re-render signalling: `themeAtom` holds `{ id, tone }`; `RegistryProvider` wraps both render paths in `index.tsx`.
|
|
138
94
|
|
|
139
95
|
## [0.1.0] — 2026-05-10
|
|
140
96
|
|
|
@@ -142,17 +98,13 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
|
|
|
142
98
|
|
|
143
99
|
### Added — TUI
|
|
144
100
|
|
|
145
|
-
- Two-pane browser: sidebar + reader, with a focus model, sidebar
|
|
146
|
-
visibility toggle (`\`), and a `?` help overlay generated from the
|
|
147
|
-
bindings array.
|
|
101
|
+
- Two-pane browser: sidebar + reader, with a focus model, sidebar visibility toggle (`\`), and a `?` help overlay generated from the bindings array.
|
|
148
102
|
- Single-file mode when invoked on a file path.
|
|
149
|
-
- Themes: dark + light as typed `ColorPalette` values, mutable singleton
|
|
150
|
-
consumer, selected via `--theme`.
|
|
103
|
+
- Themes: dark + light as typed `ColorPalette` values, mutable singleton consumer, selected via `--theme`.
|
|
151
104
|
|
|
152
105
|
### Added — discovery
|
|
153
106
|
|
|
154
|
-
- Recursive walk from the path argument (or cwd), `.md` / `.markdown` /
|
|
155
|
-
`.mdx` only.
|
|
107
|
+
- Recursive walk from the path argument (or cwd), `.md` / `.markdown` / `.mdx` only.
|
|
156
108
|
- Honors `.gitignore` (root + nested).
|
|
157
109
|
- Hard-skips `node_modules`, `.git`, `.venv` (always, even with `--all`).
|
|
158
110
|
- Does not follow symlinks.
|
|
@@ -163,49 +115,28 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
|
|
|
163
115
|
|
|
164
116
|
### Added — keymap
|
|
165
117
|
|
|
166
|
-
- `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional
|
|
167
|
-
|
|
168
|
-
help overlay.
|
|
169
|
-
- Bindings: `j`/`k` + arrows, shift-jump, page/half-page, `g`/`G`,
|
|
170
|
-
`return`/`l`/`→`, `escape`/`h`/`←`, `[`/`]`, `tab`, `\`, `?`,
|
|
171
|
-
`q`/`ctrl+c`. Reserved (not bound): `/`, `e`, `o`, `r`.
|
|
118
|
+
- `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional `when` / `run`. Single source for both `useKeyboard` dispatch and the help overlay.
|
|
119
|
+
- Bindings: `j`/`k` + arrows, shift-jump, page/half-page, `g`/`G`, `return`/`l`/`→`, `escape`/`h`/`←`, `[`/`]`, `tab`, `\`, `?`, `q`/`ctrl+c`. Reserved (not bound): `/`, `e`, `o`, `r`.
|
|
172
120
|
|
|
173
121
|
### Added — release infra
|
|
174
122
|
|
|
175
|
-
- Distribution as `@carlesandres/openmdr` on npm (Bun runtime required
|
|
176
|
-
|
|
177
|
-
- `.github/workflows/
|
|
178
|
-
and `npm pack --dry-run` on every push and PR.
|
|
179
|
-
- `.github/workflows/publish.yml`: `release: published` triggers
|
|
180
|
-
`npm publish` via Trusted Publisher (OIDC, no token), with a
|
|
181
|
-
tag-vs-`package.json`-version assertion before publish.
|
|
123
|
+
- Distribution as `@carlesandres/openmdr` on npm (Bun runtime required on user's `PATH`, no compiled binary). Modeled on ghui.
|
|
124
|
+
- `.github/workflows/ci.yml`: typecheck, lint, format:check, test, and `npm pack --dry-run` on every push and PR.
|
|
125
|
+
- `.github/workflows/publish.yml`: `release: published` triggers `npm publish` via Trusted Publisher (OIDC, no token), with a tag-vs-`package.json`-version assertion before publish.
|
|
182
126
|
- `.oxfmtrc.json`: pinned formatting so `format:check` is meaningful.
|
|
183
127
|
|
|
184
128
|
### Added — docs
|
|
185
129
|
|
|
186
|
-
- `DESIGN.md`: foundational design doc (13 sections; §3 non-goals,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
- `README.md`, `CONTRIBUTING.md`, `AGENTS.md` (cookbook for AI
|
|
190
|
-
assistants), `LICENSE` (MIT).
|
|
191
|
-
- Issue templates (bug + feature + blank), PR template. All
|
|
192
|
-
communication routes through GitHub issues.
|
|
130
|
+
- `DESIGN.md`: foundational design doc (13 sections; §3 non-goals, §5.3 deferred, §7.3 reserved keys, §10 v2 gates, §12 deferred patterns with triggers).
|
|
131
|
+
- `README.md`, `CONTRIBUTING.md`, `AGENTS.md` (cookbook for AI assistants), `LICENSE` (MIT).
|
|
132
|
+
- Issue templates (bug + feature + blank), PR template. All communication routes through GitHub issues.
|
|
193
133
|
|
|
194
134
|
### Added — tests
|
|
195
135
|
|
|
196
|
-
- 75 headless tests via `testRender` + `captureCharFrame` +
|
|
197
|
-
`mockInput`.
|
|
136
|
+
- 75 headless tests via `testRender` + `captureCharFrame` + `mockInput`.
|
|
198
137
|
|
|
199
138
|
### Out of scope (deliberate, see DESIGN.md §3 / §5.3)
|
|
200
139
|
|
|
201
|
-
Search, stdin, URL fetching, cross-file link following, `$EDITOR`
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
[#2](https://github.com/carlesandres/openmdr/issues/2)),
|
|
205
|
-
Homebrew tap. All tracked.
|
|
206
|
-
|
|
207
|
-
[Unreleased]: https://github.com/carlesandres/house/compare/v0.3.0...HEAD
|
|
208
|
-
[0.3.0]: https://github.com/carlesandres/house/compare/v0.2.1...v0.3.0
|
|
209
|
-
[0.2.1]: https://github.com/carlesandres/house/compare/v0.2.0...v0.2.1
|
|
210
|
-
[0.2.0]: https://github.com/carlesandres/house/compare/v0.1.0...v0.2.0
|
|
211
|
-
[0.1.0]: https://github.com/carlesandres/house/releases/tag/v0.1.0
|
|
140
|
+
Search, stdin, URL fetching, cross-file link following, `$EDITOR` hand-off, syntax highlighting, persistent config, OS-appearance auto-detect, single-binary distribution (issue [#2](https://github.com/carlesandres/openmdr/issues/2)), Homebrew tap. All tracked.
|
|
141
|
+
|
|
142
|
+
[Unreleased]: https://github.com/carlesandres/house/compare/v0.4.1...HEAD [0.4.1]: https://github.com/carlesandres/house/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/carlesandres/house/compare/v0.3.1...v0.4.0 [0.3.1]: https://github.com/carlesandres/house/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/carlesandres/house/compare/v0.2.1...v0.3.0 [0.2.1]: https://github.com/carlesandres/house/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/carlesandres/house/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/carlesandres/house/releases/tag/v0.1.0
|
package/README.md
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
# house
|
|
1
|
+
# ⌂ house
|
|
2
2
|
|
|
3
|
-
A terminal markdown reader
|
|
4
|
-
Point it at a directory and navigate its `.md` files without leaving the terminal.
|
|
3
|
+
A terminal markdown reader and navigator — themable and configurable, with a keyboard-driven modern UI. Point it at a directory and browse its `.md` files without leaving the terminal.
|
|
5
4
|
|
|
6
5
|

|
|
7
6
|
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **30+ themes** with dark and light tones
|
|
10
|
+
- **Responsive layout**
|
|
11
|
+
- **Fuzzy search** across nested folders (`.gitignore`-aware)
|
|
12
|
+
- **Command palette**
|
|
13
|
+
- **Keyboard-driven**
|
|
14
|
+
- **Open in browser**
|
|
15
|
+
|
|
8
16
|
Requires [Bun](https://bun.sh) on `PATH`.
|
|
9
17
|
|
|
10
18
|
## Install
|
|
@@ -18,7 +26,7 @@ bun add -g @carlesandres/house
|
|
|
18
26
|
## Upgrade
|
|
19
27
|
|
|
20
28
|
```bash
|
|
21
|
-
npm
|
|
29
|
+
npm i -g @carlesandres/house
|
|
22
30
|
# or
|
|
23
31
|
bun add -g @carlesandres/house
|
|
24
32
|
```
|
|
@@ -37,6 +45,32 @@ house [options] <path>
|
|
|
37
45
|
|------|---------|-------------|
|
|
38
46
|
| `--theme <name>` | `opencode` | Starting theme (see list below) |
|
|
39
47
|
| `--tone dark\|light` | `dark` | Starting tone |
|
|
48
|
+
| `--config-path` | — | Print the resolved config-file path and exit |
|
|
49
|
+
|
|
50
|
+
## Configuration
|
|
51
|
+
|
|
52
|
+
house reads optional defaults from a TOML file:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
$XDG_CONFIG_HOME/house/config.toml (defaults to ~/.config/house/config.toml)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Run `house --config-path` to print the exact location.
|
|
59
|
+
|
|
60
|
+
```toml
|
|
61
|
+
# ~/.config/house/config.toml
|
|
62
|
+
theme = "tokyonight"
|
|
63
|
+
tone = "dark"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Precedence, highest to lowest:
|
|
67
|
+
|
|
68
|
+
1. CLI flags (`--theme`, `--tone`)
|
|
69
|
+
2. Env vars (`HOUSE_THEME`, `HOUSE_TONE`)
|
|
70
|
+
3. Config file
|
|
71
|
+
4. Built-in defaults (`opencode` / `dark`)
|
|
72
|
+
|
|
73
|
+
The file is optional — a missing file is fine. Invalid keys, unknown themes, or malformed TOML fail loudly with a one-line error. Per-project config (`.house/config.toml`) and additional keys are deferred.
|
|
40
74
|
|
|
41
75
|
## Keys
|
|
42
76
|
|
|
@@ -78,15 +112,9 @@ house [options] <path>
|
|
|
78
112
|
|
|
79
113
|
## Themes
|
|
80
114
|
|
|
81
|
-
33 built-in themes, all sourced from the
|
|
82
|
-
[opencode](https://github.com/anomalyco/opencode) TUI palette:
|
|
115
|
+
33 built-in themes, all sourced from the [opencode](https://github.com/anomalyco/opencode) TUI palette:
|
|
83
116
|
|
|
84
|
-
`aura` · `ayu` · `carbonfox` · `catppuccin` · `catppuccin-frappe` ·
|
|
85
|
-
`catppuccin-macchiato` · `cobalt2` · `cursor` · `dracula` · `everforest` ·
|
|
86
|
-
`flexoki` · `github` · `gruvbox` · `kanagawa` · `lucent-orng` · `material` ·
|
|
87
|
-
`matrix` · `mercury` · `monokai` · `nightowl` · `nord` · `one-dark` ·
|
|
88
|
-
`opencode` · `orng` · `osaka-jade` · `palenight` · `rosepine` · `solarized` ·
|
|
89
|
-
`synthwave84` · `tokyonight` · `vercel` · `vesper` · `zenburn`
|
|
117
|
+
`aura` · `ayu` · `carbonfox` · `catppuccin` · `catppuccin-frappe` · `catppuccin-macchiato` · `cobalt2` · `cursor` · `dracula` · `everforest` · `flexoki` · `github` · `gruvbox` · `kanagawa` · `lucent-orng` · `material` · `matrix` · `mercury` · `monokai` · `nightowl` · `nord` · `one-dark` · `opencode` · `orng` · `osaka-jade` · `palenight` · `rosepine` · `solarized` · `synthwave84` · `tokyonight` · `vercel` · `vesper` · `zenburn`
|
|
90
118
|
|
|
91
119
|
Each theme supports dark and light tones. Cycle with `t` / `T`; toggle tone with `L`.
|
|
92
120
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carlesandres/house",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "TUI-first markdown reader on opentui",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"format:check": "oxfmt --check src/",
|
|
46
46
|
"test": "bun test",
|
|
47
47
|
"build:themes": "bun run dev/build-themes.ts",
|
|
48
|
-
"repro:pty-codeblocks": "bun run dev/repro-pty-codeblocks.ts"
|
|
48
|
+
"repro:pty-codeblocks": "bun run dev/repro-pty-codeblocks.ts",
|
|
49
|
+
"prepare": "git config core.hooksPath .githooks 2>/dev/null || true"
|
|
49
50
|
},
|
|
50
51
|
"dependencies": {
|
|
51
52
|
"@effect/atom-react": "4.0.0-beta.59",
|